Project - 4 - Advanced Lane Lines

Due Date: January 24th, 2017

In [457]:
import numpy as np
import cv2
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import os
from moviepy.editor import VideoFileClip
from moviepy.editor import CompositeVideoClip
from IPython.display import HTML

print('Imports successful.')
Imports successful.

Calibration

In [458]:
# Load all the calibration images and convert to gray scale.

directory = "CarND-Advanced-Lane-Lines/camera_cal/"

imgfilenames = sorted(os.listdir(directory))
pixelh = 720
pixelw = 1280

cal_images_gray = np.zeros( [len(imgfilenames), pixelh, pixelw], dtype='uint8')
for num, name  in enumerate(imgfilenames):
    
    # Calibration images 07 and 15 have an extra height and width pixel for some reason.
    if num == 6 or num == 14:
        imgtemp = cv2.cvtColor(mpimg.imread(directory + name), cv2.COLOR_RGB2GRAY) 
        cal_images_gray[num] = imgtemp[1:721, 1:1281]
        continue
    
    cal_images_gray[num] = cv2.cvtColor(mpimg.imread(directory + name), cv2.COLOR_RGB2GRAY)
    print(name)
calibration01.jpg
calibration02.jpg
calibration03.jpg
calibration04.jpg
calibration05.jpg
calibration06.jpg
calibration08.jpg
calibration09.jpg
calibration10.jpg
calibration11.jpg
calibration12.jpg
calibration13.jpg
calibration14.jpg
calibration16.jpg
calibration17.jpg
calibration18.jpg
calibration19.jpg
calibration20.jpg
In [459]:
# Find Chessboard corners.

objpoints = [] 
imgpoints = []

objp = np.zeros((9*6,3), np.float32)
#print(np.mgrid[0:8,0:6])
#print('\n')
#print(np.mgrid[0:8, 0:6].T.reshape(-1,2))
objp[:,:2] = np.mgrid[0:9, 0:6].T.reshape(-1,2)
#print(objp)

for i in range(20):
    image = cal_images_gray[i]
    ret, corners = cv2.findChessboardCorners(image, (9,6), None)
    print(str(i) + ': '+ str(ret))
    
    if ret == True:
        imgpoints.append(corners)
        objpoints.append(objp)
        
        image = cv2.drawChessboardCorners(image, (9,6), corners, ret)
        plt.imshow(image)
0: False
1: True
2: True
3: True
4: False
5: True
6: True
7: True
8: True
9: True
10: True
11: True
12: True
13: True
14: True
15: True
16: True
17: True
18: True
19: True
In [460]:
def img_undistort(img, objpoints, imgpoints):
    gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) # Must read image using mpimg.imread
    
    output = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)
    
    undist = cv2.undistort(img, output[1], output[2], None, output[1])
    return undist, output

disimage = mpimg.imread(directory + imgfilenames[18])
plt.imshow(disimage)
plt.show()

undistort, camOut = img_undistort(disimage, objpoints, imgpoints)
plt.imshow(undistort)
plt.show()

Undistort Test Images

In [461]:
directory = "CarND-Advanced-Lane-Lines/test_images/"

imgfilenames = sorted(os.listdir(directory))

undist_test = []

for imgname in imgfilenames:
    
    f, (p1, p2) = plt.subplots(1, 2, figsize=(10, 5))
    f.tight_layout()
    
    disimage = mpimg.imread(directory + imgname)
    p1.imshow(disimage)
    p1.set_title('Original Image: ' + imgname)
    
    undistort, camOut = img_undistort(disimage, objpoints, imgpoints)
    undist_test.append(undistort)
    p2.imshow(undistort)
    p2.set_title('Undistorted Image')
    plt.show()

undist_test = np.asarray(undist_test)

Transform into Binary Image

RGB Color Threshold

Assume all lane lines are either yellow or white. Pure white is RGB = (255, 255, 255) and pure yellow is RGB = (255,255,0). So really a high threshold on both the R AND the G should force the remaining pixels to either be yellow or white.

In [462]:
# Yellow and white color threshold.
img = undist_test[5]
#threshmin = 130
threshmax = 255

def red_thresh(img, threshmin, threshmax):
    retval, binaryred = cv2.threshold(img[:,:,0], threshmin, threshmax, cv2.THRESH_BINARY)
    return binaryred

for threshmin in range(90, 211, 20):
    binaryred = red_thresh(img, threshmin, threshmax)
    retval, binarygreen = cv2.threshold(img[:,:,1], threshmin, threshmax, cv2.THRESH_BINARY)

    f, (p1,p2) = plt.subplots(1,2, figsize=(10,5))
    f.tight_layout()

    p1.imshow(binaryred, cmap='gray')
    p1.set_title('Red Threshold Min: '+ str(threshmin))

    p2.imshow(binarygreen, cmap='gray')
    p2.set_title('Green Threshold')
    plt.show()

Thresholding for yellow and white colors only seems to work on dark pavement. On the light pavement colors it doesn't really pick anything up until the very high thresholds which remove other information.

However using a low threshold (like 90 or less) just on the red threshold could be used as an AND with other transforms since it could potentially help on the dark pavement sections and essentially have no effect on the light pavement sections.

HLS Threshold

In [463]:
# HLS - Test image 4 and 5 seem to be the best images that have both the light and dark pavement.

# Test image 4
hlsimg = cv2.cvtColor(undist_test[3], cv2.COLOR_RGB2HLS)

f, ((p1,p2),(p3,p4)) = plt.subplots(2,2, figsize=(10,5))
f.tight_layout()

p1.imshow(undist_test[3])
p1.set_title('Original testimage 4')

p2.imshow(hlsimg[:,:,0],cmap='gray')
p2.set_title('Hue')


p3.imshow(hlsimg[:,:,1],cmap='gray')
p3.set_title('Lightness')

p4.imshow(hlsimg[:,:,2],cmap='gray')
p4.set_title('Saturation')
plt.show()

# Test image 5
hlsimg = cv2.cvtColor(undist_test[4], cv2.COLOR_RGB2HLS)

f, ((p1,p2),(p3,p4)) = plt.subplots(2,2, figsize=(10,5))
f.tight_layout()

p1.imshow(undist_test[3])
p1.set_title('Original testimage 5')

p2.imshow(hlsimg[:,:,0],cmap='gray')
p2.set_title('Hue')


p3.imshow(hlsimg[:,:,1],cmap='gray')
p3.set_title('Lightness')

p4.imshow(hlsimg[:,:,2],cmap='gray')
p4.set_title('Saturation')
plt.show()

Saturation channel seems to clearly be the best but still am not happy with the results on their own. Looking at the last photo in the bottom right you can see that on the white pavement section the right lane lines hardly shows up at all.

In [464]:
# RGB to HLS with threshold transform.
def hls_transform(img, threshmin=0, threshmax=255):
    # Convert to HLS form RGB.
    hlsimg = cv2.cvtColor(img, cv2.COLOR_RGB2HLS)
    # Create binary image with a threshold just on the saturation channel.
    ret, binary = cv2.threshold(hlsimg[:,:,2], threshmin, threshmax, cv2.THRESH_BINARY)
    
    return binary
In [465]:
threshmin = 90
threshmax = 200

transimg = undist_test[3]

for threshmin in range(70,151, 10):
    f, (p1, p2) = plt.subplots(1, 2, figsize=(10, 5))
    f.tight_layout() 

    p1.imshow(transimg)
    p1.set_title('Original Image  Min:'+ str(threshmin))

    transimgoutput = hls_transform(transimg, threshmin, threshmax)
    p2.imshow(transimgoutput, cmap='gray')
    p2.set_title('Transform Image')
    plt.show()

For saturation 100 seems like a good threshold point.

Prespective Transform

In [466]:
# Only use images 1, 4, 5, 6 since the image two isn't from the same video as as the project
# and for some reason in image 3 the cars hood is edited out. This could mess up the test transform.

%matplotlib notebook

plt.figure(figsize=(10,5))
plt.imshow(undist_test[0])
plt.show()
In [467]:
%matplotlib inline
# Four coordinates in original image. (width, height).
srccord = np.float32(
            [[600, 460], # Top left.
            [720, 460], # Top right.
            [265, 720], # Bottom left.
            [1125, 720]])# Bottom right. 
# Four coordinates in transformed image.
dstcord = np.float32(
            [[280, 200], # Top left.
            [1000, 200], # Top right.
            [280, 720], # Bottom left.
            [1000, 720]]) # Bottom right.

imgorig = np.copy(undist_test[0])
img = cv2.line(imgorig, tuple(srccord[0].reshape(1, -1)[0]),
                  tuple(srccord[1].reshape(1, -1)[0]), (255,255,255), thickness=4, lineType=8, shift=0)
img = cv2.line(img, tuple(srccord[2].reshape(1, -1)[0]),
                  tuple(srccord[3].reshape(1, -1)[0]), (255,255,255), thickness=4, lineType=8, shift=0)
img = cv2.line(img, tuple(srccord[0].reshape(1, -1)[0]),
                  tuple(srccord[2].reshape(1, -1)[0]), (255,255,255), thickness=4, lineType=8, shift=0)
img = cv2.line(img, tuple(srccord[3].reshape(1, -1)[0]),
                  tuple(srccord[1].reshape(1, -1)[0]), (255,255,255), thickness=4, lineType=8, shift=0)
plt.imshow(imgorig)
    
Out[467]:
<matplotlib.image.AxesImage at 0x7fec188ce6a0>

No real math or special method was used to get a starting point for perspective transform. Just manually placing the points by inspecting the image seemed to work fine for everything except how far down the road it should look before the resolution of the camera fails to provide enough data. I also could not think of a solid way of using math to determine what the perspective points should be since there are no perfectly straight sections of the road. If there was a nice straight section of road that could be used in a real case to determine the ideal perspective transform points.

To determine how far along the road its possible to look I ran a number of different distances below and determined the point at which the camera resolution doesn't provide enough information.

In [468]:
for topcord in range(420,481,5):
    srccord[0,1] = topcord
    srccord[1,1] = topcord
    
    M = cv2.getPerspectiveTransform(srccord,dstcord)
    Minv = cv2.getPerspectiveTransform(dstcord, srccord)
    
    warped = cv2.warpPerspective(undist_test[5], M, (1280,720), flags=cv2.INTER_LINEAR)
    
    f = plt.figure(figsize=(10,5))
    plt.imshow(warped)
    f.suptitle('Top Cord: ' + str(topcord))
    plt.show()

Based on the above plots its seems that before 465, there isn't enough lane line information in the image (due to the resolution of the camera). Before 465, even through my own inspection it is difficult to make out the lane lines.

In [469]:
def pers_transform(img, inv='no'):
    # Four coordinates in original image. (width, height).
    srccord = np.float32(
                [[600, 465], # Top left.
                [720, 465], # Top right.
                [265, 720], # Bottom left.
                [1125, 720]])# Bottom right. 
    # Four coordinates in transformed image.
    dstcord = np.float32(
                [[280, 200], # Top left.
                [1000, 200], # Top right.
                [280, 720], # Bottom left.
                [1000, 720]]) # Bottom right.
    if inv == 'no':
        M = cv2.getPerspectiveTransform(srccord,dstcord)
    if inv == 'yes':
        M = cv2.getPerspectiveTransform(dstcord, srccord)
    
    pimg = cv2.warpPerspective(img, M, (1280,720), flags=cv2.INTER_LINEAR)
    return pimg

for i in [0,3,4,5]:    
    f, (p1, p2) = plt.subplots(1,2, figsize=(10,5))
    f.tight_layout()
    
    warped = pers_transform(undist_test[i])
    p1.imshow(warped)
    
    p2.imshow(undist_test[i])
    plt.show()
    

Gradient Threshold

In [470]:
%matplotlib inline

# X or Y Threshold
def abs_threshold(img, orient, threshmin, threshmax):
    # Convert to grayscale.
    gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    # Take derivative in x or y given orient.
    if orient == 'x':
        sobel = cv2.Sobel(gray, cv2.CV_64F, 1,0)
    if orient == 'y':
        sobel = cv2.Sobel(gray, cv2.CV_64F, 0,1)
    
    # Take absolute value of derivative.
    sobel_abs = np.absolute(sobel)
    # Scale to 0 - 255 and convert to unsigned interger.
    scaled_sobel = np.uint8(255*sobel_abs/np.max(sobel_abs))
    # Create binary output (1 indicates threshold is met).
    binary_output = np.zeros_like(scaled_sobel)
    binary_output[(scaled_sobel >= threshmin) & (scaled_sobel <= threshmax)] = 1
    
    return binary_output
    
# Magnitude Gradient
def mag_threshold(img, sobel_kernel, threshmin, threshmax):
    # Convert to grayscale.
    gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    # Calculate gradient in both x and y direction.
    sobelx = cv2.Sobel(gray, cv2.CV_64F, 1,0, ksize=sobel_kernel)
    sobely = cv2.Sobel(gray, cv2.CV_64F, 0,1, ksize=sobel_kernel)
    # Calculate the magnitude of the gradient.
    mag = np.sqrt(sobelx**2 + sobely**2)
    # Rescale to 0 - 255 and convert to unsigned interger.
    scale_factor = np.max(mag)/255
    mag = (mag/scale_factor).astype(np.uint8)
    # Create binary output (1 indicates threshold is met).
    binary_output = np.zeros_like(mag)
    binary_output[(mag >= threshmin) & (mag <= threshmax)] = 1
    
    return binary_output

# Direction Gradient
def dir_threshold(img, sobel_kernel, threshmin, threshmax):
    # Convert to grayscale.
    gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    # Calculate gradient in both x and y direction.
    sobelx = cv2.Sobel(gray, cv2.CV_64F, 1,0, ksize=sobel_kernel)
    sobely = cv2.Sobel(gray, cv2.CV_64F, 0,1, ksize=sobel_kernel)
    
    # Suppress error messages.
    with np.errstate(divide='ignore', invalid='ignore'):
        # Find the direction of the gradient.
        dgrad_abs = np.absolute(np.arctan(sobely/sobelx))
        # Create binary output (1 indicates threshold is met).
        binary_output = np.zeros_like(dgrad_abs)
        binary_output[(dgrad_abs >= threshmin) & (dgrad_abs <= threshmax)] = 1
        
    return binary_output.astype(np.uint8)
In [471]:
# Run all sobel gradients to compare and analyze possible combination of thresholds.
def total_sobel(img, xthresh, ythresh, magkernel, magthresh, dirkernel, dirthresh):
    # Original Image
    f, (p1, p2) = plt.subplots(1,2, figsize=(10,5))
    f.tight_layout()
    p1.imshow(img)
    p1.set_title('Original Image',color='w')
    p2.imshow(pers_transform(img))
    p2.set_title('Prespective Transform')
    plt.show()


    # X Gradient 
    orient = 'x'
    f, (p1, p2) = plt.subplots(1,2, figsize=(10,5))
    f.tight_layout()
    ximg = abs_threshold(img, orient, xthresh[0], xthresh[1])
    p1.imshow(ximg, cmap='gray')
    p1.set_title('X Gradient',color='w')
    p2.imshow(pers_transform(ximg), cmap='gray')
    p2.set_title('Prespective Transform')
    plt.show()

    # Y Gradient 
    orient = 'y'
    f, (p1, p2) = plt.subplots(1,2, figsize=(10,5))
    f.tight_layout()
    yimg = abs_threshold(img, orient, ythresh[0], ythresh[1])
    p1.imshow(yimg, cmap='gray')
    p1.set_title('Y Gradient',color='w')
    p2.imshow(pers_transform(yimg), cmap='gray')
    p2.set_title('Prespective Transform')
    plt.show()

    # Magnitude Gradient
    f, (p1, p2) = plt.subplots(1,2, figsize=(10,5))
    f.tight_layout()
    magimg = mag_threshold(img, magkernel, magthresh[0], magthresh[1])
    p1.imshow(magimg, cmap='gray')
    p1.set_title('Magnitude Gradient',color='w')
    p2.imshow(pers_transform(magimg), cmap='gray')
    p2.set_title('Prespective Transform')
    plt.show()

    # Direction Gradient
    f, (p1, p2) = plt.subplots(1,2, figsize=(10,5))
    f.tight_layout()
    dirimg = dir_threshold(img, dirkernel, dirthresh[0], dirthresh[1])
    p1.imshow(dirimg, cmap='gray')   
    p1.set_title('Direction Gradient', color='w')
    p2.imshow(pers_transform(dirimg), cmap='gray')
    p2.set_title('Prespective Transform')
    plt.show()

A final gradient output that is a combination of mutliple thresholds (absolute, magnitude, direction) is required to help find the lane lines in an image. While the output doesn't have to be perfect, because I will end up combining what I find with the HLS color threshold, it does have to be fairly good and seeing the lane lines.

Once I tune the parameters for a very good gradient that works on all of the images (1,4,5,6) I'll then fine tune the parameters so it can work better when I combine it with the HLS threshold and the R color threshold.

In [472]:
xthresh = [30, 150]
ythresh = [40, 100]
magkernel = 7
magthresh = [30, 100]
dirkernel = 7
dirthresh = [0.4, 1.1]
total_sobel(undist_test[5], xthresh, ythresh, magkernel, magthresh, dirkernel, dirthresh)

No amount of fine tuning seems to have the y gradient yield any information that is not in the x gradient. This would negate any benefit from using a y gradient in an OR with the x gradient. Also the y gradient is far too noisy for things outside the lane lines to be any use as a standalone addition. So I'm not going to use the y gradient for the final gradient combination.

The magnitude direction gradient on its own is very good at finding the lane lines however, it also pickups a great deal of noise. My main goal when selecting a direction gradient is to have it pick up the lane lines, but not the pieces of noise that can be seen in the magnitude gradient.

In the above picture it can be seen that the direction gardient picks up almost everything in the image, except for the noise seen in pixels 0-100 in the Y axis of the magnitude gradient. This means that using the direction gradient in an AND operator with the magnitude gradient should help filter out most of its noise.

In [473]:
def combined_grad(img, xthresh, magkernel, magthresh, dirkernel, dirthresh):
    # Take absolute threshold in x direction.
    abs_bin = abs_threshold(img, 'x', xthresh[0], xthresh[1])
    mag_bin = mag_threshold(img, magkernel, magthresh[0], magthresh[1])
    dir_bin = dir_threshold(img, dirkernel, dirthresh[0], dirthresh[1])
    
    com_bin = np.zeros_like(dir_bin)
    com_bin[ (abs_bin == 1) | ((mag_bin == 1) & (dir_bin == 1))] = 1
    return com_bin
In [474]:
# Combined Gradient
f, (p1, p2) = plt.subplots(1,2, figsize=(10,5))
f.tight_layout()
combinedimg = combined_grad(undist_test[5], xthresh, magkernel, magthresh, dirkernel, dirthresh)
p1.imshow(undist_test[5])   
p1.set_title('Dark Road', color='w')
p2.imshow(undist_test[3])
p2.set_title('Light Road', color='w')
plt.show()

f, (p1, p2) = plt.subplots(1,2, figsize=(10,5))
f.tight_layout()
combinedimg = combined_grad(undist_test[5], xthresh, magkernel, magthresh, dirkernel, dirthresh)
p1.imshow(combinedimg, cmap='gray')   
p1.set_title('Combined Gradient - Dark Road', color='w')
p2.imshow(pers_transform(combinedimg), cmap='gray')
p2.set_title('Prespective Transform')
plt.show()

f, (p1, p2) = plt.subplots(1,2, figsize=(10,5))
f.tight_layout()
combinedimg = combined_grad(undist_test[3], xthresh, magkernel, magthresh, dirkernel, dirthresh)
p1.imshow(combinedimg, cmap='gray')   
p1.set_title('Combined Gradient - Light Road', color='w')
p2.imshow(pers_transform(combinedimg), cmap='gray')
p2.set_title('Prespective Transform')
plt.show()

The combined gradient performs well on dark road surfaces. However even the combined gradient performs poorly on light road surfaces. This is due to the lack of difference between a light road surface and a light painted line. In order to capture the lane line data on a light road surface the color or HLS thresholds will be used.

Combining Color, HLS, and Gradient

The first threshold I performed only on the red color channel I believe is still beneficial. A very low threshold (easily passed) will be used that will essentially filter out any object that doesn't have a strong red component (which the white and yellow lines will have plenty of). Thus I will use the red color channel threshold as an AND with both the HLS and gradient.

The HLS and gradient aspects will be used in an OR operator since they both have different strengths. The gradient is really good at dark road surfaces (where there is a large difference between the light lines and the dark road) and the HLS is really good at picking up any deep colors, regardless of the light or darkness of the road surface. However inorder to avoid most of the noise the HLS threshold has to be set quite aggressive, which is why the gardient threshold is needed.

In [475]:
# The default values for this function contain the final fine tuned parameters.
def combined_total (img, ident='all', rthresh=[70,255], sthresh=[120,200], xthresh=[30,150], 
                    magkernel=7, magthresh=[30,100], dirkernel=7, dirthresh=[0.4,1.23]):
    # Calculate binary image using red threshold.
    bin_red = red_thresh(img, rthresh[0], rthresh[1])
    # Calculate binary image using saturation threshold.
    bin_sat = hls_transform(img, sthresh[0], sthresh[1])
    # Calculate binary image using gradient threshold.
    bin_grd = combined_grad(img, xthresh, magkernel, magthresh, dirkernel, dirthresh)
    
    # Combine binary images as:
    # (red AND sat) OR (red AND grd).
    total_bin = np.zeros_like(bin_grd)
    total_bin[ ((bin_red >= 1) & (bin_sat >= 1)) | ((bin_red >= 1) & (bin_grd >= 1)) ] = 1    

    if ident == 'all':
        return total_bin
    if ident == 'red':
        return bin_red
    if ident == 'sat':
        return bin_sat
    if ident == 'grd':
        return bin_grd
    
In [476]:
for i in [0, 3,4,5]:
    f, (p1, p2) = plt.subplots(1,2, figsize=(10,5))
    f.tight_layout() 
    p1.imshow(pers_transform(undist_test[i]))
    p1.set_title('Test Image - '+str(i+1), color='w')
    p2.imshow(pers_transform(combined_total(undist_test[i],'all')), cmap='gray')
    p2.set_title('Combined Binary', color='w')
    plt.show()
    
    f, (p1, p2) = plt.subplots(1,2, figsize=(10,5))
    f.tight_layout()
    p1.imshow(pers_transform(combined_total(undist_test[i],'sat')), cmap='gray')
    p1.set_title('Saturation Threshold', color='w')
    p2.imshow(pers_transform(combined_total(undist_test[i],'grd')), cmap='gray')
    p2.set_title('Combined Gradient', color='w')
    plt.show()
    

The final binary image parameters can be seen on 4 of the test images above. On all 4 images the lane lines are clearly shown. Looking at test image 5, my decision to include the red threshold as an AND operator on both saturation and gradient really pays off. As seen in the saturation threshold for test image 5, there is a great deal of noise on the Y axis around 300 pixels which isn't included in the final combined binary image. This is because the very weak red threshold (which allows almost everything in the image) clearly doesn't allow this dark shadow to pass through since it contains a very low red channel number.

Also using both gradient and saturation can be seen as necessary since there are some images where the saturation threshold is contributing almost all lane line information and there are other images where the majority of the lane line information is caputred by the gradient.

Estimate Lane Line Pixels

In [477]:
def find_lane_lines(img_in, chunk=4, start_pointl=[0], start_pointr=[0], output='img'):
    # Create binary image containing lane lines and the rest of image.
    img = pers_transform(combined_total(img_in,'all'))
    
    lpeak = []
    rpeak = []
    
    # If no previous start point data, search for lines using sliding window.
    if ((start_pointr[0] == 0) & (start_pointl[0] == 0)):
        # Split the image into separate vertical chunks and find lane line location in each chunk. 
        for i in range(chunk-1,-1,-1):
            # Generate histogram to find the lane line data.
            histogram = np.sum(img[int(img.shape[0]*i/chunk):int(img.shape[0]*(i+1)/chunk),:], axis=0)
            # Find area in historgram with most pixels which determines the right and left lanes.
            lpeak.append(np.argmax(histogram[:750]))
            rpeak.append(np.argmax(histogram[750:]))
            # Code below is purely for visuals for histogram plot.
            #histogram[lpeak[-1]-50] = 200
            #histogram[lpeak[-1]+50] = 200
            #histogram[rpeak[-1]-50+750] = 200
            #histogram[rpeak[-1]+50+750] = 200
            #plt.plot(histogram)
        

    # If a starting point is provided, set r and l peak to it.
    if start_pointr[0] != 0:
        rpeak = start_pointr
                
    if start_pointl[0] != 0:
        lpeak = start_pointl

    
    # Based on start point, see which direction lane line is moving by comparing
    # number of pixels to the left and right of middle position.
    for i in range(chunk-1, -1, -1):
        # Count all pixels to the left of the previous frames window.
        shiftl = np.count_nonzero(img[int(img.shape[0]*i/chunk):int(img.shape[0]*(i+1)/chunk),
              lpeak[chunk-1-i]-80:lpeak[chunk-1-i]])
        # Count all pixels to the right of the previous frames window.
        shiftr = np.count_nonzero(img[int(img.shape[0]*i/chunk):int(img.shape[0]*(i+1)/chunk),
              lpeak[chunk-1-i]:lpeak[chunk-1-i]+80])
        
        # Used for debugging which direction window should move.
        if i == 0:
            shiftll = shiftl
            shiftrr = shiftr
        
        # If the difference between the left or right pixels is greater than 200, move window
        # in that direction. If less than 200 pixels difference, stay where it is.
        if (shiftl - shiftr) > 200:
            lpeak[chunk-1-i] = lpeak[chunk-1-i] - 5
        elif (shiftr - shiftl) > 200:
            lpeak[chunk-1-i] = lpeak[chunk-1-i] + 5
        # If line data lost, use histogram to re-acquire but must be within 150 pixels of last
        # point where they were detected.
        elif ((shiftr + shiftl) == 0):
            histogram = np.sum(img[int(img.shape[0]*i/chunk):int(img.shape[0]*(i+1)/chunk),
                                   :], axis=0)
            if (abs(lpeak[chunk-1-i] - np.argmax(histogram[:750])) < 150):
                lpeak[chunk-1-i] = np.argmax(histogram[:750])
        
        # Repeat above for right lane.
        shiftl = np.count_nonzero(img[int(img.shape[0]*i/chunk):int(img.shape[0]*(i+1)/chunk),
              rpeak[chunk-1-i]-80+750:rpeak[chunk-1-i]+750])
        shiftr = np.count_nonzero(img[int(img.shape[0]*i/chunk):int(img.shape[0]*(i+1)/chunk),
              rpeak[chunk-1-i]+750:rpeak[chunk-1-i]+80+750])

        if (shiftl - shiftr) > 200:
            rpeak[chunk-1-i] = rpeak[chunk-1-i] - 5
        elif (shiftr - shiftl) > 200:
            rpeak[chunk-1-i] = rpeak[chunk-1-i] + 5
        elif ((shiftr + shiftl) == 0):
            histogram = np.sum(img[int(img.shape[0]*i/chunk):int(img.shape[0]*(i+1)/chunk),
                                   :], axis=0)
            if (abs(rpeak[chunk-1-i] - np.argmax(histogram[750:])) < 150):
                rpeak[chunk-1-i] = np.argmax(histogram[750:])

                
    
    # Create binary image which shows area of both left and right lane line.
    peaks = np.zeros_like(img)
    for i in range(chunk-1, -1, -1):
        # This prevents error when trying to write values out of bounds of peaks.
        if lpeak[chunk-1-i]-80 < 0:
            lpeak[chunk-1-i] = 80
        if rpeak[chunk-1-i]-80 < 0:
            rpeak[chunk-1-i] = 80
        # 160 pixel wide area where the peak of the histogram was found for each chunk.
        peaks[int(img.shape[0]*i/chunk):int(img.shape[0]*(i+1)/chunk),
              lpeak[chunk-1-i]-80:lpeak[chunk-1-i]+80] = 1
        peaks[int(img.shape[0]*i/chunk):int(img.shape[0]*(i+1)/chunk),
              rpeak[chunk-1-i]-80+750:rpeak[chunk-1-i]+80+750] = 2        
        
    
    
    # If transformed image data overlaps with left and right lane line area, keep it.
    lane_lines = np.zeros_like(img)
    # Left lane lines are indicated by 1, right lane lines are 2. Everything else is 0.
    # Commented out lines are used for debugging and showing windows and pixels.
    #lane_lines[peaks == 1] = 2
    lane_lines[ (img == 1) & (peaks == 1)] = 1
    
    #lane_lines[peaks ==2] = 1
    lane_lines[ (img == 1) & (peaks == 2)] = 2
    

    # The loc output will be used for seeking the lane line starting position.
    if output == 'img':
        return lane_lines
    if output == 'loc':
        return lane_lines, lpeak, rpeak, shiftll, shiftrr
    if output == 'peak':
        return peaks
    if output == 'peakloc':
        return peaks, lpeak, rpeak

Show how previous iteration positional knowledge can be used for current lane estimation.

In [478]:
f, (p1, p2, p3) = plt.subplots(1,3, figsize=(10,5))
f.tight_layout()
p1.imshow(pers_transform(combined_total(undist_test[3],'all')),cmap='gray')
p1.set_title('Combined Threshold')
p2.imshow(find_lane_lines(undist_test[3],4, [0], [0], 'peak'), cmap='gray')
p2.set_title('Histogram Margin')
p3.imshow(find_lane_lines(undist_test[3],4, [0], [0], 'img'), cmap='gray')
p3.set_title('Final')
plt.show()
In [479]:
# Show ignoring current lane estimation due to being to far from starting point.
start_pointl = [240, 217, 198, 195, 194, 200]
start_pointr = [300, 310, 300, 330, 345, 330]

f, (p1, p2) = plt.subplots(1,2, figsize=(10,5))
f.tight_layout()
p1.imshow(find_lane_lines(undist_test[3],6, start_pointl, start_pointr, 'peak'),cmap='gray')
p1.set_title('With Starting Point')
p2.imshow(find_lane_lines(undist_test[3],6, [0], [0], 'peak'), cmap='gray')
p2.set_title('Without Starting Point')
plt.show()

f, (p1, p2) = plt.subplots(1,2, figsize=(10,5))
f.tight_layout()
p1.imshow(find_lane_lines(undist_test[3],6, start_pointl, start_pointr),cmap='gray')
p1.set_title('With Starting Point')
p2.imshow(find_lane_lines(undist_test[3],6), cmap='gray')
p2.set_title('Without Starting Point')
plt.show()
In [480]:
for i in [0,4,5]:    
    f, (p1, p2) = plt.subplots(1,2, figsize=(10,5))
    f.tight_layout() 
    p1.imshow(pers_transform(combined_total(undist_test[i])),cmap='gray')
    p2.imshow(find_lane_lines(undist_test[i],4), cmap='gray')
    plt.show()

Measuring Radius of Curvature

In [481]:
# Input requires binary image with only estiamted lane line pixels.
def rad_curve(bin_img):
    # Change image data into row (y axis) and column (x axis) information.
    locl = np.where(bin_img == 1)
    locr = np.where(bin_img == 2)
    # Fit each lane line to a 2nd order polynomial.
    lfit = np.polyfit(locl[0], locl[1], 2)
    rfit = np.polyfit(locr[0], locr[1], 2)
    # Generate polynomial line data.
    yval = np.linspace(0,100, num=101)*7.2
    rfitx = rfit[0]*yval**2 + rfit[1]*yval + rfit[2]
    lfitx = lfit[0]*yval**2 + lfit[1]*yval + lfit[2]
    
    # Plots useful for visualizing data.
    #plt.plot(locl[1], locl[0],'x')
    #plt.plot(locr[1], locr[0],'x', color='r')
    #plt.plot(rfitx, locr[0], color='g', linewidth=2)
    #plt.plot(lfitx, locl[0], color='g', linewidth=2)
    #plt.plot(afitx, locl[0], color='black')
    #plt.gca().invert_yaxis()
    
    # Assume lane width is 3.7 meters and dashed lane lines are 3 meters.
    # Right lane dashed line goes from roughly pixel 500 to 600.
    ydist_pix = 3/100 # 3 meters per 100 pixels.
    # Left left lane to right lane is roughly 800 pixels.
    xdist_pix = 3.7/800 # 3.7 meters per 800 pixels.
    # Fit pixel to distance values to a 2nd order polynomial.
    lfitd = np.polyfit(locl[0]*ydist_pix, locl[1]*xdist_pix, 2)
    rfitd = np.polyfit(locr[0]*ydist_pix, locr[1]*xdist_pix, 2)
    
    # Calculate radius of curvature at median (roughly middle) from the car.
    y_carl = np.median(locl[0])
    lrad = (( 1 + (2*lfitd[0]*y_carl + lfitd[1])**2 )**1.5) / np.absolute(2*lfitd[0])
    y_carr = np.median(locr[0])
    rrad = (( 1 + (2*rfitd[0]*y_carr + rfitd[1])**2 )**1.5) / np.absolute(2*rfitd[0])
    # Calculate average between two radii of curvature.
    avgrad = (lrad + rrad)/2
    
    # Calculate distance from center. From images center of hood seems to be center of image
    # which is at pixel 640.
    # Find location of lane closest to the car based on polynomial.
    y_carr = np.max(locr[0])
    y_carl = np.max(locl[0])
    llane = lfit[0]*y_carl**2 + lfit[1]*y_carl + lfit[2]
    rlane = rfit[0]*y_carr**2 + rfit[1]*y_carr + rfit[2]

    # Average two lane positions to find where center of the lane is.
    midlane = (llane + rlane)/2
    # Difference between middle of lane and center of car. Convert to m from pixels.
    diff_center = (midlane-640)*xdist_pix # Negative is car is left of middle of lane.
    
    return [lrad, rrad, avgrad, diff_center], [lfitx, rfitx, yval]

Put Information Back On Original Image

In [482]:
def overlay_curve(img, radinfo, unwarp='yes'):
    overlay = np.zeros_like(img).astype(np.uint8)
    
    pts_left = np.array([np.transpose(np.vstack([radinfo[1][0], radinfo[1][2]]))])
    pts_right = np.array([np.flipud(np.transpose(np.vstack([radinfo[1][1], radinfo[1][2]])))])
    pts = np.hstack((pts_left,pts_right))
    
    # Draw onto lane.
    cv2.fillPoly(overlay, np.int_([pts]), (0,255,0))
    if unwarp == 'no':
        return overlay
    
    # Inverse perspective transform.
    unwarp_layer = pers_transform(overlay, 'yes')
    
    return cv2.addWeighted(img, 1, unwarp_layer,0.3, 0)

Video Generation

Now that I can find the lane lines and measure the curvature and distance from center, it is time to adapt what I have made to work on video files as opposed to single images.

In [454]:
class Line():
    def __init__(self):
        self.peak = []
        self.count = 0
        self.fitx = np.zeros((5, 101))
        self.diff_c = np.zeros(5)
        self.avgrad = np.zeros(5)
        
Left = Line()
Right = Line()
font = cv2.FONT_HERSHEY_SIMPLEX
def process_image(image):
    # Used for only processing trouble section of video for debugging.
#     Left.count = Left.count + 1
#     if ((Left.count < 475) | (Left.count > 675 )):
#         return image
    
    if len(Left.peak) == 0:
        undist = cv2.undistort(image, camOut[1], camOut[2], None, camOut[1])
        
        #bin_img = pers_transform(combined_total(image,'all'))
        bin_img, l, r, shiftl, shiftr = find_lane_lines(undist, 4, [0], [0], 'loc')
        radinfo = rad_curve(bin_img)
        final = overlay_curve(undist, radinfo, 'yes')
        
    else:
        undist = cv2.undistort(image, camOut[1], camOut[2], None, camOut[1])
    
        bin_img, l, r, shiftl, shiftr = find_lane_lines(undist, 4, Left.peak, Right.peak, 'loc')
        radinfo = rad_curve(bin_img)
        
        # Shift all old fitx values down one.
        for i in range(0,4):
            Left.fitx[i] = Left.fitx[i+1]
            Right.fitx[i] = Right.fitx[i+1]
            Left.diff_c[i] = Left.diff_c[i+1]
            Left.avgrad[i] = Left.avgrad[i+1]
        
        # Replace 
        Left.fitx[-1] = radinfo[1][0]
        Right.fitx[-1] = radinfo[1][1]
        Left.diff_c[-1] = radinfo[0][3]
        Left.avgrad[-1] = radinfo[0][2]      
        if (np.count_nonzero(Left.fitx) == 505):
            # Update radinfo with averaged values.
            radinfo[1][0] = np.average(Left.fitx,0)
            radinfo[1][1] = np.average(Right.fitx,0)
            radinfo[0][3] = np.average(Left.diff_c)
            radinfo[0][2] = np.average(Left.avgrad)
            
            # Display information on image.
            final = overlay_curve(undist, radinfo, 'yes')
            
            cv2.putText(final,'Radius of Curvature: '+str(int(radinfo[0][2]))+' m',(10,50), 
                        font, 1,(255,255,255),2)

            if radinfo[0][3] < 0:
                cv2.putText(final,'Car is ' + str(abs(round(radinfo[0][3],2))) + ' m left of center.',(10,100),
                            font, 1,(255,255,255),2)
            if radinfo[0][3] >= 0:
                cv2.putText(final,'Car is '+str(round(radinfo[0][3],2))+' m right of center.',(10,100),
                            font, 1,(255,255,255),2)
        else:
            final = image
            cv2.putText(final,'Radius of Curvature: Acquiring...',(10,50), 
                        font, 1,(255,255,255),2)
    
#     color_bin = np.dstack((bin_img*100, bin_img*100, bin_img*100))
#     font = cv2.FONT_HERSHEY_SIMPLEX
#     cv2.putText(color_bin,'Final,(10,650), 
#                 font, 1,(255,255,255),2)

        
    Left.peak = l
    Right.peak = r
    
    

    
    return final

vid_output = 'rad-test2-opt2.mp4'
clip1 = VideoFileClip("project_video.mp4")
vid_clip = clip1.fl_image(process_image) #NOTE: this function expects color images!!
%time vid_clip.write_videofile(vid_output, audio=False)
[MoviePy] >>>> Building video rad-test2-opt2.mp4
[MoviePy] Writing video rad-test2-opt2.mp4

  0%|          | 0/1261 [00:00<?, ?it/s]

  0%|          | 1/1261 [00:00<05:30,  3.81it/s]

  0%|          | 2/1261 [00:00<04:57,  4.23it/s]

  0%|          | 3/1261 [00:00<05:06,  4.11it/s]

  0%|          | 4/1261 [00:00<04:32,  4.61it/s]

  0%|          | 5/1261 [00:01<04:16,  4.90it/s]

  0%|          | 6/1261 [00:01<04:13,  4.96it/s]

  1%|          | 7/1261 [00:01<03:58,  5.25it/s]

  1%|          | 8/1261 [00:01<04:05,  5.10it/s]

  1%|          | 9/1261 [00:01<03:55,  5.32it/s]

  1%|          | 10/1261 [00:01<03:48,  5.48it/s]

  1%|          | 11/1261 [00:02<03:56,  5.29it/s]

  1%|          | 12/1261 [00:02<03:56,  5.28it/s]

  1%|          | 13/1261 [00:02<03:49,  5.43it/s]

  1%|          | 14/1261 [00:02<04:04,  5.11it/s]

  1%|          | 15/1261 [00:02<03:54,  5.31it/s]

  1%|▏         | 16/1261 [00:03<03:57,  5.25it/s]

  1%|▏         | 17/1261 [00:03<03:54,  5.31it/s]

  1%|▏         | 18/1261 [00:03<03:49,  5.42it/s]

  2%|▏         | 19/1261 [00:03<03:48,  5.43it/s]

  2%|▏         | 20/1261 [00:03<03:45,  5.49it/s]

  2%|▏         | 21/1261 [00:03<03:38,  5.67it/s]

  2%|▏         | 22/1261 [00:04<03:45,  5.50it/s]

  2%|▏         | 23/1261 [00:04<03:49,  5.40it/s]

  2%|▏         | 24/1261 [00:04<03:42,  5.57it/s]

  2%|▏         | 25/1261 [00:04<03:39,  5.62it/s]

  2%|▏         | 26/1261 [00:04<03:44,  5.50it/s]

  2%|▏         | 27/1261 [00:05<03:42,  5.55it/s]

  2%|▏         | 28/1261 [00:05<03:45,  5.48it/s]

  2%|▏         | 29/1261 [00:05<03:50,  5.33it/s]

  2%|▏         | 30/1261 [00:05<03:51,  5.32it/s]

  2%|▏         | 31/1261 [00:05<03:55,  5.22it/s]

  3%|▎         | 32/1261 [00:06<04:04,  5.04it/s]

  3%|▎         | 33/1261 [00:06<04:02,  5.06it/s]

  3%|▎         | 34/1261 [00:06<04:06,  4.99it/s]

  3%|▎         | 35/1261 [00:06<04:01,  5.09it/s]

  3%|▎         | 36/1261 [00:06<03:56,  5.19it/s]

  3%|▎         | 37/1261 [00:07<04:06,  4.96it/s]

  3%|▎         | 38/1261 [00:07<03:53,  5.23it/s]

  3%|▎         | 39/1261 [00:07<03:45,  5.42it/s]

  3%|▎         | 40/1261 [00:07<03:41,  5.52it/s]

  3%|▎         | 41/1261 [00:07<03:34,  5.68it/s]

  3%|▎         | 42/1261 [00:07<03:34,  5.68it/s]

  3%|▎         | 43/1261 [00:08<04:05,  4.97it/s]

  3%|▎         | 44/1261 [00:08<04:00,  5.06it/s]

  4%|▎         | 45/1261 [00:08<03:56,  5.14it/s]

  4%|▎         | 46/1261 [00:08<03:53,  5.20it/s]

  4%|▎         | 47/1261 [00:08<03:51,  5.25it/s]

  4%|▍         | 48/1261 [00:09<03:51,  5.25it/s]

  4%|▍         | 49/1261 [00:09<03:54,  5.17it/s]

  4%|▍         | 50/1261 [00:09<03:51,  5.24it/s]

  4%|▍         | 51/1261 [00:09<03:43,  5.41it/s]

  4%|▍         | 52/1261 [00:09<04:03,  4.96it/s]

  4%|▍         | 53/1261 [00:10<03:56,  5.11it/s]

  4%|▍         | 54/1261 [00:10<03:49,  5.27it/s]

  4%|▍         | 55/1261 [00:10<03:47,  5.30it/s]

  4%|▍         | 56/1261 [00:10<03:45,  5.35it/s]

  5%|▍         | 57/1261 [00:10<03:36,  5.55it/s]

  5%|▍         | 58/1261 [00:10<03:45,  5.34it/s]

  5%|▍         | 59/1261 [00:11<03:42,  5.40it/s]

  5%|▍         | 60/1261 [00:11<03:44,  5.36it/s]

  5%|▍         | 61/1261 [00:11<03:49,  5.23it/s]

  5%|▍         | 62/1261 [00:11<03:41,  5.42it/s]

  5%|▍         | 63/1261 [00:11<03:45,  5.31it/s]

  5%|▌         | 64/1261 [00:12<03:45,  5.32it/s]

  5%|▌         | 65/1261 [00:12<03:50,  5.19it/s]

  5%|▌         | 66/1261 [00:12<03:50,  5.19it/s]

  5%|▌         | 67/1261 [00:12<03:54,  5.08it/s]

  5%|▌         | 68/1261 [00:12<03:54,  5.08it/s]

  5%|▌         | 69/1261 [00:13<03:54,  5.09it/s]

  6%|▌         | 70/1261 [00:13<03:48,  5.22it/s]

  6%|▌         | 71/1261 [00:13<03:57,  5.02it/s]

  6%|▌         | 72/1261 [00:13<04:05,  4.84it/s]

  6%|▌         | 73/1261 [00:13<03:51,  5.13it/s]

  6%|▌         | 74/1261 [00:14<04:00,  4.94it/s]

  6%|▌         | 75/1261 [00:14<03:53,  5.07it/s]

  6%|▌         | 76/1261 [00:14<03:43,  5.30it/s]

  6%|▌         | 77/1261 [00:14<03:42,  5.31it/s]

  6%|▌         | 78/1261 [00:14<03:52,  5.10it/s]

  6%|▋         | 79/1261 [00:15<03:46,  5.21it/s]

  6%|▋         | 80/1261 [00:15<03:42,  5.31it/s]

  6%|▋         | 81/1261 [00:15<03:43,  5.29it/s]

  7%|▋         | 82/1261 [00:15<03:57,  4.96it/s]

  7%|▋         | 83/1261 [00:15<03:57,  4.96it/s]

  7%|▋         | 84/1261 [00:16<04:00,  4.90it/s]

  7%|▋         | 85/1261 [00:16<03:54,  5.01it/s]

  7%|▋         | 86/1261 [00:16<03:48,  5.13it/s]

  7%|▋         | 87/1261 [00:16<03:48,  5.15it/s]

  7%|▋         | 88/1261 [00:16<03:58,  4.92it/s]

  7%|▋         | 89/1261 [00:17<04:03,  4.81it/s]

  7%|▋         | 90/1261 [00:17<04:00,  4.86it/s]

  7%|▋         | 91/1261 [00:17<03:47,  5.15it/s]

  7%|▋         | 92/1261 [00:17<03:49,  5.10it/s]

  7%|▋         | 93/1261 [00:17<03:48,  5.10it/s]

  7%|▋         | 94/1261 [00:18<03:41,  5.26it/s]

  8%|▊         | 95/1261 [00:18<03:36,  5.38it/s]

  8%|▊         | 96/1261 [00:18<03:33,  5.45it/s]

  8%|▊         | 97/1261 [00:18<03:35,  5.41it/s]

  8%|▊         | 98/1261 [00:18<03:36,  5.38it/s]

  8%|▊         | 99/1261 [00:18<03:33,  5.43it/s]

  8%|▊         | 100/1261 [00:19<03:37,  5.34it/s]

  8%|▊         | 101/1261 [00:19<03:37,  5.34it/s]

  8%|▊         | 102/1261 [00:19<03:37,  5.34it/s]

  8%|▊         | 103/1261 [00:19<03:39,  5.28it/s]

  8%|▊         | 104/1261 [00:19<03:41,  5.22it/s]

  8%|▊         | 105/1261 [00:20<03:44,  5.14it/s]

  8%|▊         | 106/1261 [00:20<03:46,  5.09it/s]

  8%|▊         | 107/1261 [00:20<03:42,  5.19it/s]

  9%|▊         | 108/1261 [00:20<03:48,  5.06it/s]

  9%|▊         | 109/1261 [00:20<03:48,  5.04it/s]

  9%|▊         | 110/1261 [00:21<03:35,  5.34it/s]

  9%|▉         | 111/1261 [00:21<03:40,  5.22it/s]

  9%|▉         | 112/1261 [00:21<03:51,  4.96it/s]

  9%|▉         | 113/1261 [00:21<03:47,  5.05it/s]

  9%|▉         | 114/1261 [00:21<03:47,  5.04it/s]

  9%|▉         | 115/1261 [00:22<03:38,  5.23it/s]

  9%|▉         | 116/1261 [00:22<03:32,  5.38it/s]

  9%|▉         | 117/1261 [00:22<03:33,  5.37it/s]

  9%|▉         | 118/1261 [00:22<03:34,  5.34it/s]

  9%|▉         | 119/1261 [00:22<03:35,  5.31it/s]

 10%|▉         | 120/1261 [00:23<03:49,  4.98it/s]

 10%|▉         | 121/1261 [00:23<03:37,  5.24it/s]

 10%|▉         | 122/1261 [00:23<03:40,  5.17it/s]

 10%|▉         | 123/1261 [00:23<03:36,  5.26it/s]

 10%|▉         | 124/1261 [00:23<03:34,  5.31it/s]

 10%|▉         | 125/1261 [00:23<03:30,  5.39it/s]

 10%|▉         | 126/1261 [00:24<03:32,  5.33it/s]

 10%|█         | 127/1261 [00:24<03:31,  5.36it/s]

 10%|█         | 128/1261 [00:24<03:26,  5.47it/s]

 10%|█         | 129/1261 [00:24<03:25,  5.51it/s]

 10%|█         | 130/1261 [00:24<03:26,  5.49it/s]

 10%|█         | 131/1261 [00:25<03:27,  5.44it/s]

 10%|█         | 132/1261 [00:25<03:21,  5.60it/s]

 11%|█         | 133/1261 [00:25<03:28,  5.40it/s]

 11%|█         | 134/1261 [00:25<03:23,  5.53it/s]

 11%|█         | 135/1261 [00:25<03:25,  5.48it/s]

 11%|█         | 136/1261 [00:25<03:23,  5.52it/s]

 11%|█         | 137/1261 [00:26<03:30,  5.34it/s]

 11%|█         | 138/1261 [00:26<03:38,  5.13it/s]

 11%|█         | 139/1261 [00:26<03:42,  5.03it/s]

 11%|█         | 140/1261 [00:26<03:34,  5.24it/s]

 11%|█         | 141/1261 [00:26<03:44,  5.00it/s]

 11%|█▏        | 142/1261 [00:27<03:37,  5.14it/s]

 11%|█▏        | 143/1261 [00:27<03:29,  5.35it/s]

 11%|█▏        | 144/1261 [00:27<03:28,  5.35it/s]

 11%|█▏        | 145/1261 [00:27<03:26,  5.41it/s]

 12%|█▏        | 146/1261 [00:27<03:26,  5.39it/s]

 12%|█▏        | 147/1261 [00:28<03:31,  5.27it/s]

 12%|█▏        | 148/1261 [00:28<03:28,  5.35it/s]

 12%|█▏        | 149/1261 [00:28<03:23,  5.47it/s]

 12%|█▏        | 150/1261 [00:28<03:21,  5.52it/s]

 12%|█▏        | 151/1261 [00:28<03:19,  5.55it/s]

 12%|█▏        | 152/1261 [00:28<03:21,  5.50it/s]

 12%|█▏        | 153/1261 [00:29<03:29,  5.29it/s]

 12%|█▏        | 154/1261 [00:29<03:30,  5.26it/s]

 12%|█▏        | 155/1261 [00:29<03:31,  5.24it/s]

 12%|█▏        | 156/1261 [00:29<03:25,  5.38it/s]

 12%|█▏        | 157/1261 [00:29<03:22,  5.45it/s]

 13%|█▎        | 158/1261 [00:30<03:19,  5.54it/s]

 13%|█▎        | 159/1261 [00:30<03:14,  5.67it/s]

 13%|█▎        | 160/1261 [00:30<03:22,  5.45it/s]

 13%|█▎        | 161/1261 [00:30<03:22,  5.43it/s]

 13%|█▎        | 162/1261 [00:30<03:14,  5.66it/s]

 13%|█▎        | 163/1261 [00:30<03:18,  5.52it/s]

 13%|█▎        | 164/1261 [00:31<03:27,  5.29it/s]

 13%|█▎        | 165/1261 [00:31<03:18,  5.52it/s]

 13%|█▎        | 166/1261 [00:31<03:13,  5.66it/s]

 13%|█▎        | 167/1261 [00:31<03:25,  5.33it/s]

 13%|█▎        | 168/1261 [00:31<03:28,  5.24it/s]

 13%|█▎        | 169/1261 [00:32<03:27,  5.26it/s]

 13%|█▎        | 170/1261 [00:32<03:32,  5.13it/s]

 14%|█▎        | 171/1261 [00:32<03:31,  5.16it/s]

 14%|█▎        | 172/1261 [00:32<03:26,  5.27it/s]

 14%|█▎        | 173/1261 [00:32<03:20,  5.44it/s]

 14%|█▍        | 174/1261 [00:33<03:20,  5.43it/s]

 14%|█▍        | 175/1261 [00:33<03:17,  5.50it/s]

 14%|█▍        | 176/1261 [00:33<03:25,  5.29it/s]

 14%|█▍        | 177/1261 [00:33<03:22,  5.36it/s]

 14%|█▍        | 178/1261 [00:33<03:17,  5.49it/s]

 14%|█▍        | 179/1261 [00:33<03:19,  5.43it/s]

 14%|█▍        | 180/1261 [00:34<03:15,  5.52it/s]

 14%|█▍        | 181/1261 [00:34<03:15,  5.51it/s]

 14%|█▍        | 182/1261 [00:34<03:13,  5.57it/s]

 15%|█▍        | 183/1261 [00:34<03:19,  5.41it/s]

 15%|█▍        | 184/1261 [00:34<03:23,  5.28it/s]

 15%|█▍        | 185/1261 [00:35<03:18,  5.43it/s]

 15%|█▍        | 186/1261 [00:35<03:19,  5.40it/s]

 15%|█▍        | 187/1261 [00:35<03:16,  5.46it/s]

 15%|█▍        | 188/1261 [00:35<03:17,  5.44it/s]

 15%|█▍        | 189/1261 [00:35<03:17,  5.43it/s]

 15%|█▌        | 190/1261 [00:35<03:10,  5.61it/s]

 15%|█▌        | 191/1261 [00:36<03:18,  5.39it/s]

 15%|█▌        | 192/1261 [00:36<03:33,  5.01it/s]

 15%|█▌        | 193/1261 [00:36<03:25,  5.21it/s]

 15%|█▌        | 194/1261 [00:36<03:17,  5.40it/s]

 15%|█▌        | 195/1261 [00:36<03:18,  5.36it/s]

 16%|█▌        | 196/1261 [00:37<03:19,  5.34it/s]

 16%|█▌        | 197/1261 [00:37<03:28,  5.11it/s]

 16%|█▌        | 198/1261 [00:37<03:25,  5.18it/s]

 16%|█▌        | 199/1261 [00:37<03:25,  5.17it/s]

 16%|█▌        | 200/1261 [00:37<03:15,  5.42it/s]

 16%|█▌        | 201/1261 [00:38<03:17,  5.37it/s]

 16%|█▌        | 202/1261 [00:38<03:19,  5.32it/s]

 16%|█▌        | 203/1261 [00:38<03:13,  5.46it/s]

 16%|█▌        | 204/1261 [00:38<03:14,  5.42it/s]

 16%|█▋        | 205/1261 [00:38<03:12,  5.49it/s]

 16%|█▋        | 206/1261 [00:38<03:16,  5.37it/s]

 16%|█▋        | 207/1261 [00:39<03:08,  5.59it/s]

 16%|█▋        | 208/1261 [00:39<03:08,  5.58it/s]

 17%|█▋        | 209/1261 [00:39<03:04,  5.71it/s]

 17%|█▋        | 210/1261 [00:39<03:06,  5.64it/s]

 17%|█▋        | 211/1261 [00:39<03:05,  5.65it/s]

 17%|█▋        | 212/1261 [00:40<03:08,  5.55it/s]

 17%|█▋        | 213/1261 [00:40<03:13,  5.43it/s]

 17%|█▋        | 214/1261 [00:40<03:19,  5.24it/s]

 17%|█▋        | 215/1261 [00:40<03:22,  5.16it/s]

 17%|█▋        | 216/1261 [00:40<03:26,  5.06it/s]

 17%|█▋        | 217/1261 [00:41<03:16,  5.31it/s]

 17%|█▋        | 218/1261 [00:41<03:13,  5.39it/s]

 17%|█▋        | 219/1261 [00:41<03:06,  5.60it/s]

 17%|█▋        | 220/1261 [00:41<03:13,  5.39it/s]

 18%|█▊        | 221/1261 [00:41<03:22,  5.14it/s]

 18%|█▊        | 222/1261 [00:41<03:24,  5.09it/s]

 18%|█▊        | 223/1261 [00:42<03:15,  5.30it/s]

 18%|█▊        | 224/1261 [00:42<03:14,  5.34it/s]

 18%|█▊        | 225/1261 [00:42<03:15,  5.31it/s]

 18%|█▊        | 226/1261 [00:42<03:24,  5.07it/s]

 18%|█▊        | 227/1261 [00:42<03:20,  5.16it/s]

 18%|█▊        | 228/1261 [00:43<03:18,  5.21it/s]

 18%|█▊        | 229/1261 [00:43<03:14,  5.29it/s]

 18%|█▊        | 230/1261 [00:43<03:30,  4.90it/s]

 18%|█▊        | 231/1261 [00:43<03:25,  5.02it/s]

 18%|█▊        | 232/1261 [00:43<03:19,  5.15it/s]

 18%|█▊        | 233/1261 [00:44<03:13,  5.32it/s]

 19%|█▊        | 234/1261 [00:44<03:13,  5.32it/s]

 19%|█▊        | 235/1261 [00:44<03:06,  5.51it/s]

 19%|█▊        | 236/1261 [00:44<03:14,  5.27it/s]

 19%|█▉        | 237/1261 [00:44<03:09,  5.41it/s]

 19%|█▉        | 238/1261 [00:44<03:07,  5.46it/s]

 19%|█▉        | 239/1261 [00:45<03:06,  5.49it/s]

 19%|█▉        | 240/1261 [00:45<03:01,  5.62it/s]

 19%|█▉        | 241/1261 [00:45<03:10,  5.34it/s]

 19%|█▉        | 242/1261 [00:45<03:08,  5.40it/s]

 19%|█▉        | 243/1261 [00:45<03:07,  5.42it/s]

 19%|█▉        | 244/1261 [00:46<03:08,  5.40it/s]

 19%|█▉        | 245/1261 [00:46<03:11,  5.31it/s]

 20%|█▉        | 246/1261 [00:46<03:11,  5.31it/s]

 20%|█▉        | 247/1261 [00:46<03:02,  5.56it/s]

 20%|█▉        | 248/1261 [00:46<03:11,  5.29it/s]

 20%|█▉        | 249/1261 [00:47<03:14,  5.20it/s]

 20%|█▉        | 250/1261 [00:47<03:11,  5.29it/s]

 20%|█▉        | 251/1261 [00:47<03:11,  5.26it/s]

 20%|█▉        | 252/1261 [00:47<03:04,  5.47it/s]

 20%|██        | 253/1261 [00:47<03:16,  5.13it/s]

 20%|██        | 254/1261 [00:47<03:08,  5.33it/s]

 20%|██        | 255/1261 [00:48<03:08,  5.34it/s]

 20%|██        | 256/1261 [00:48<03:08,  5.32it/s]

 20%|██        | 257/1261 [00:48<03:11,  5.25it/s]

 20%|██        | 258/1261 [00:48<03:12,  5.21it/s]

 21%|██        | 259/1261 [00:48<03:09,  5.29it/s]

 21%|██        | 260/1261 [00:49<03:04,  5.42it/s]

 21%|██        | 261/1261 [00:49<03:10,  5.24it/s]

 21%|██        | 262/1261 [00:49<03:26,  4.85it/s]

 21%|██        | 263/1261 [00:49<03:30,  4.75it/s]

 21%|██        | 264/1261 [00:49<03:24,  4.88it/s]

 21%|██        | 265/1261 [00:50<03:21,  4.94it/s]

 21%|██        | 266/1261 [00:50<03:16,  5.08it/s]

 21%|██        | 267/1261 [00:50<03:17,  5.03it/s]

 21%|██▏       | 268/1261 [00:50<03:27,  4.78it/s]

 21%|██▏       | 269/1261 [00:51<03:29,  4.74it/s]

 21%|██▏       | 270/1261 [00:51<03:19,  4.96it/s]

 21%|██▏       | 271/1261 [00:51<03:19,  4.96it/s]

 22%|██▏       | 272/1261 [00:51<03:24,  4.83it/s]

 22%|██▏       | 273/1261 [00:51<03:21,  4.89it/s]

 22%|██▏       | 274/1261 [00:51<03:15,  5.05it/s]

 22%|██▏       | 275/1261 [00:52<03:18,  4.96it/s]

 22%|██▏       | 276/1261 [00:52<03:24,  4.82it/s]

 22%|██▏       | 277/1261 [00:52<03:16,  5.01it/s]

 22%|██▏       | 278/1261 [00:52<03:11,  5.13it/s]

 22%|██▏       | 279/1261 [00:53<03:20,  4.91it/s]

 22%|██▏       | 280/1261 [00:53<03:17,  4.97it/s]

 22%|██▏       | 281/1261 [00:53<03:18,  4.95it/s]

 22%|██▏       | 282/1261 [00:53<03:17,  4.97it/s]

 22%|██▏       | 283/1261 [00:53<03:15,  5.00it/s]

 23%|██▎       | 284/1261 [00:53<03:10,  5.12it/s]

 23%|██▎       | 285/1261 [00:54<03:08,  5.18it/s]

 23%|██▎       | 286/1261 [00:54<03:03,  5.31it/s]

 23%|██▎       | 287/1261 [00:54<03:06,  5.21it/s]

 23%|██▎       | 288/1261 [00:54<03:07,  5.19it/s]

 23%|██▎       | 289/1261 [00:54<02:59,  5.43it/s]

 23%|██▎       | 290/1261 [00:55<02:59,  5.42it/s]

 23%|██▎       | 291/1261 [00:55<02:56,  5.50it/s]

 23%|██▎       | 292/1261 [00:55<02:57,  5.46it/s]

 23%|██▎       | 293/1261 [00:55<02:55,  5.52it/s]

 23%|██▎       | 294/1261 [00:55<02:52,  5.61it/s]

 23%|██▎       | 295/1261 [00:55<02:54,  5.53it/s]

 23%|██▎       | 296/1261 [00:56<02:56,  5.47it/s]

 24%|██▎       | 297/1261 [00:56<03:01,  5.30it/s]

 24%|██▎       | 298/1261 [00:56<03:02,  5.27it/s]

 24%|██▎       | 299/1261 [00:56<03:11,  5.03it/s]

 24%|██▍       | 300/1261 [00:56<03:11,  5.03it/s]

 24%|██▍       | 301/1261 [00:57<03:08,  5.11it/s]

 24%|██▍       | 302/1261 [00:57<03:05,  5.18it/s]

 24%|██▍       | 303/1261 [00:57<03:01,  5.27it/s]

 24%|██▍       | 304/1261 [00:57<03:01,  5.28it/s]

 24%|██▍       | 305/1261 [00:57<02:57,  5.38it/s]

 24%|██▍       | 306/1261 [00:58<03:00,  5.29it/s]

 24%|██▍       | 307/1261 [00:58<02:58,  5.36it/s]

 24%|██▍       | 308/1261 [00:58<02:58,  5.32it/s]

 25%|██▍       | 309/1261 [00:58<03:05,  5.15it/s]

 25%|██▍       | 310/1261 [00:58<03:01,  5.25it/s]

 25%|██▍       | 311/1261 [00:59<03:04,  5.15it/s]

 25%|██▍       | 312/1261 [00:59<03:01,  5.22it/s]

 25%|██▍       | 313/1261 [00:59<03:01,  5.22it/s]

 25%|██▍       | 314/1261 [00:59<03:03,  5.17it/s]

 25%|██▍       | 315/1261 [00:59<02:56,  5.35it/s]

 25%|██▌       | 316/1261 [01:00<02:52,  5.47it/s]

 25%|██▌       | 317/1261 [01:00<03:04,  5.12it/s]

 25%|██▌       | 318/1261 [01:00<02:58,  5.29it/s]

 25%|██▌       | 319/1261 [01:00<03:04,  5.12it/s]

 25%|██▌       | 320/1261 [01:00<03:01,  5.19it/s]

 25%|██▌       | 321/1261 [01:01<03:04,  5.10it/s]

 26%|██▌       | 322/1261 [01:01<02:59,  5.24it/s]

 26%|██▌       | 323/1261 [01:01<02:59,  5.21it/s]

 26%|██▌       | 324/1261 [01:01<02:58,  5.24it/s]

 26%|██▌       | 325/1261 [01:01<02:55,  5.32it/s]

 26%|██▌       | 326/1261 [01:01<02:58,  5.23it/s]

 26%|██▌       | 327/1261 [01:02<02:56,  5.30it/s]

 26%|██▌       | 328/1261 [01:02<02:52,  5.40it/s]

 26%|██▌       | 329/1261 [01:02<02:47,  5.55it/s]

 26%|██▌       | 330/1261 [01:02<02:50,  5.47it/s]

 26%|██▌       | 331/1261 [01:02<03:02,  5.11it/s]

 26%|██▋       | 332/1261 [01:03<03:01,  5.11it/s]

 26%|██▋       | 333/1261 [01:03<02:57,  5.23it/s]

 26%|██▋       | 334/1261 [01:03<02:56,  5.25it/s]

 27%|██▋       | 335/1261 [01:03<02:59,  5.16it/s]

 27%|██▋       | 336/1261 [01:03<02:52,  5.36it/s]

 27%|██▋       | 337/1261 [01:04<02:52,  5.35it/s]

 27%|██▋       | 338/1261 [01:04<02:52,  5.35it/s]

 27%|██▋       | 339/1261 [01:04<02:59,  5.15it/s]

 27%|██▋       | 340/1261 [01:04<02:51,  5.36it/s]

 27%|██▋       | 341/1261 [01:04<03:02,  5.05it/s]

 27%|██▋       | 342/1261 [01:05<03:11,  4.81it/s]

 27%|██▋       | 343/1261 [01:05<03:09,  4.85it/s]

 27%|██▋       | 344/1261 [01:05<03:02,  5.03it/s]

 27%|██▋       | 345/1261 [01:05<03:06,  4.91it/s]

 27%|██▋       | 346/1261 [01:05<03:01,  5.05it/s]

 28%|██▊       | 347/1261 [01:06<03:07,  4.88it/s]

 28%|██▊       | 348/1261 [01:06<03:16,  4.65it/s]

 28%|██▊       | 349/1261 [01:06<03:09,  4.81it/s]

 28%|██▊       | 350/1261 [01:06<03:11,  4.76it/s]

 28%|██▊       | 351/1261 [01:06<03:00,  5.05it/s]

 28%|██▊       | 352/1261 [01:07<03:01,  5.01it/s]

 28%|██▊       | 353/1261 [01:07<02:58,  5.09it/s]

 28%|██▊       | 354/1261 [01:07<02:53,  5.23it/s]

 28%|██▊       | 355/1261 [01:07<02:50,  5.31it/s]

 28%|██▊       | 356/1261 [01:07<02:50,  5.32it/s]

 28%|██▊       | 357/1261 [01:07<02:50,  5.30it/s]

 28%|██▊       | 358/1261 [01:08<02:53,  5.21it/s]

 28%|██▊       | 359/1261 [01:08<02:50,  5.29it/s]

 29%|██▊       | 360/1261 [01:08<02:53,  5.19it/s]

 29%|██▊       | 361/1261 [01:08<02:53,  5.19it/s]

 29%|██▊       | 362/1261 [01:08<03:02,  4.92it/s]

 29%|██▉       | 363/1261 [01:09<02:58,  5.04it/s]

 29%|██▉       | 364/1261 [01:09<02:55,  5.10it/s]

 29%|██▉       | 365/1261 [01:09<02:57,  5.06it/s]

 29%|██▉       | 366/1261 [01:09<03:00,  4.96it/s]

 29%|██▉       | 367/1261 [01:09<02:55,  5.08it/s]

 29%|██▉       | 368/1261 [01:10<02:50,  5.23it/s]

 29%|██▉       | 369/1261 [01:10<02:48,  5.30it/s]

 29%|██▉       | 370/1261 [01:10<02:48,  5.28it/s]

 29%|██▉       | 371/1261 [01:10<02:50,  5.22it/s]

 30%|██▉       | 372/1261 [01:10<02:51,  5.20it/s]

 30%|██▉       | 373/1261 [01:11<02:48,  5.27it/s]

 30%|██▉       | 374/1261 [01:11<02:52,  5.14it/s]

 30%|██▉       | 375/1261 [01:11<02:45,  5.35it/s]

 30%|██▉       | 376/1261 [01:11<02:44,  5.39it/s]

 30%|██▉       | 377/1261 [01:11<02:47,  5.28it/s]

 30%|██▉       | 378/1261 [01:12<02:46,  5.31it/s]

 30%|███       | 379/1261 [01:12<02:48,  5.25it/s]

 30%|███       | 380/1261 [01:12<02:46,  5.28it/s]

 30%|███       | 381/1261 [01:12<02:50,  5.17it/s]

 30%|███       | 382/1261 [01:12<02:57,  4.95it/s]

 30%|███       | 383/1261 [01:13<03:03,  4.79it/s]

 30%|███       | 384/1261 [01:13<02:54,  5.03it/s]

 31%|███       | 385/1261 [01:13<02:47,  5.22it/s]

 31%|███       | 386/1261 [01:13<02:44,  5.31it/s]

 31%|███       | 387/1261 [01:13<02:43,  5.35it/s]

 31%|███       | 388/1261 [01:13<02:45,  5.27it/s]

 31%|███       | 389/1261 [01:14<02:43,  5.34it/s]

 31%|███       | 390/1261 [01:14<02:45,  5.26it/s]

 31%|███       | 391/1261 [01:14<02:47,  5.19it/s]

 31%|███       | 392/1261 [01:14<02:44,  5.28it/s]

 31%|███       | 393/1261 [01:14<02:50,  5.09it/s]

 31%|███       | 394/1261 [01:15<02:46,  5.20it/s]

 31%|███▏      | 395/1261 [01:15<02:46,  5.22it/s]

 31%|███▏      | 396/1261 [01:15<02:50,  5.06it/s]

 31%|███▏      | 397/1261 [01:15<02:55,  4.93it/s]

 32%|███▏      | 398/1261 [01:15<02:46,  5.17it/s]

 32%|███▏      | 399/1261 [01:16<02:40,  5.37it/s]

 32%|███▏      | 400/1261 [01:16<02:39,  5.38it/s]

 32%|███▏      | 401/1261 [01:16<02:51,  5.01it/s]

 32%|███▏      | 402/1261 [01:16<02:44,  5.24it/s]

 32%|███▏      | 403/1261 [01:16<02:42,  5.26it/s]

 32%|███▏      | 404/1261 [01:17<02:42,  5.26it/s]

 32%|███▏      | 405/1261 [01:17<02:38,  5.41it/s]

 32%|███▏      | 406/1261 [01:17<02:45,  5.15it/s]

 32%|███▏      | 407/1261 [01:17<02:39,  5.37it/s]

 32%|███▏      | 408/1261 [01:17<02:50,  5.01it/s]

 32%|███▏      | 409/1261 [01:18<02:53,  4.91it/s]

 33%|███▎      | 410/1261 [01:18<02:50,  5.00it/s]

 33%|███▎      | 411/1261 [01:18<02:49,  5.01it/s]

 33%|███▎      | 412/1261 [01:18<02:47,  5.08it/s]

 33%|███▎      | 413/1261 [01:18<02:47,  5.07it/s]

 33%|███▎      | 414/1261 [01:19<02:43,  5.17it/s]

 33%|███▎      | 415/1261 [01:19<02:46,  5.08it/s]

 33%|███▎      | 416/1261 [01:19<02:41,  5.23it/s]

 33%|███▎      | 417/1261 [01:19<02:44,  5.14it/s]

 33%|███▎      | 418/1261 [01:19<02:40,  5.25it/s]

 33%|███▎      | 419/1261 [01:19<02:42,  5.19it/s]

 33%|███▎      | 420/1261 [01:20<02:45,  5.09it/s]

 33%|███▎      | 421/1261 [01:20<02:48,  4.99it/s]

 33%|███▎      | 422/1261 [01:20<02:44,  5.11it/s]

 34%|███▎      | 423/1261 [01:20<02:38,  5.28it/s]

 34%|███▎      | 424/1261 [01:20<02:40,  5.22it/s]

 34%|███▎      | 425/1261 [01:21<02:51,  4.89it/s]

 34%|███▍      | 426/1261 [01:21<02:47,  5.00it/s]

 34%|███▍      | 427/1261 [01:21<02:47,  4.97it/s]

 34%|███▍      | 428/1261 [01:21<02:44,  5.07it/s]

 34%|███▍      | 429/1261 [01:21<02:45,  5.02it/s]

 34%|███▍      | 430/1261 [01:22<02:41,  5.16it/s]

 34%|███▍      | 431/1261 [01:22<02:37,  5.29it/s]

 34%|███▍      | 432/1261 [01:22<02:34,  5.36it/s]

 34%|███▍      | 433/1261 [01:22<02:42,  5.09it/s]

 34%|███▍      | 434/1261 [01:22<02:41,  5.13it/s]

 34%|███▍      | 435/1261 [01:23<02:39,  5.18it/s]

 35%|███▍      | 436/1261 [01:23<02:43,  5.06it/s]

 35%|███▍      | 437/1261 [01:23<02:37,  5.24it/s]

 35%|███▍      | 438/1261 [01:23<02:36,  5.25it/s]

 35%|███▍      | 439/1261 [01:23<02:38,  5.19it/s]

 35%|███▍      | 440/1261 [01:24<02:35,  5.27it/s]

 35%|███▍      | 441/1261 [01:24<02:37,  5.20it/s]

 35%|███▌      | 442/1261 [01:24<02:32,  5.38it/s]

 35%|███▌      | 443/1261 [01:24<02:34,  5.30it/s]

 35%|███▌      | 444/1261 [01:24<02:35,  5.25it/s]

 35%|███▌      | 445/1261 [01:25<02:38,  5.14it/s]

 35%|███▌      | 446/1261 [01:25<02:38,  5.14it/s]

 35%|███▌      | 447/1261 [01:25<02:32,  5.35it/s]

 36%|███▌      | 448/1261 [01:25<02:32,  5.32it/s]

 36%|███▌      | 449/1261 [01:25<02:28,  5.46it/s]

 36%|███▌      | 450/1261 [01:25<02:32,  5.32it/s]

 36%|███▌      | 451/1261 [01:26<02:32,  5.32it/s]

 36%|███▌      | 452/1261 [01:26<02:31,  5.34it/s]

 36%|███▌      | 453/1261 [01:26<02:35,  5.20it/s]

 36%|███▌      | 454/1261 [01:26<02:38,  5.09it/s]

 36%|███▌      | 455/1261 [01:26<02:34,  5.22it/s]

 36%|███▌      | 456/1261 [01:27<02:35,  5.18it/s]

 36%|███▌      | 457/1261 [01:27<02:37,  5.10it/s]

 36%|███▋      | 458/1261 [01:27<02:36,  5.13it/s]

 36%|███▋      | 459/1261 [01:27<02:39,  5.03it/s]

 36%|███▋      | 460/1261 [01:27<02:31,  5.28it/s]

 37%|███▋      | 461/1261 [01:28<02:38,  5.06it/s]

 37%|███▋      | 462/1261 [01:28<02:29,  5.33it/s]

 37%|███▋      | 463/1261 [01:28<02:30,  5.29it/s]

 37%|███▋      | 464/1261 [01:28<02:25,  5.46it/s]

 37%|███▋      | 465/1261 [01:28<02:27,  5.38it/s]

 37%|███▋      | 466/1261 [01:29<02:27,  5.37it/s]

 37%|███▋      | 467/1261 [01:29<02:33,  5.19it/s]

 37%|███▋      | 468/1261 [01:29<02:36,  5.05it/s]

 37%|███▋      | 469/1261 [01:29<02:42,  4.87it/s]

 37%|███▋      | 470/1261 [01:29<02:37,  5.01it/s]

 37%|███▋      | 471/1261 [01:30<02:35,  5.10it/s]

 37%|███▋      | 472/1261 [01:30<02:33,  5.16it/s]

 38%|███▊      | 473/1261 [01:30<02:30,  5.25it/s]

 38%|███▊      | 474/1261 [01:30<02:27,  5.33it/s]

 38%|███▊      | 475/1261 [01:30<02:25,  5.40it/s]

 38%|███▊      | 476/1261 [01:30<02:23,  5.48it/s]

 38%|███▊      | 477/1261 [01:31<02:26,  5.36it/s]

 38%|███▊      | 478/1261 [01:31<02:25,  5.37it/s]

 38%|███▊      | 479/1261 [01:31<02:27,  5.31it/s]

 38%|███▊      | 480/1261 [01:31<02:30,  5.20it/s]

 38%|███▊      | 481/1261 [01:31<02:36,  4.99it/s]

 38%|███▊      | 482/1261 [01:32<02:33,  5.09it/s]

 38%|███▊      | 483/1261 [01:32<02:38,  4.92it/s]

 38%|███▊      | 484/1261 [01:32<02:33,  5.05it/s]

 38%|███▊      | 485/1261 [01:32<02:35,  4.98it/s]

 39%|███▊      | 486/1261 [01:32<02:41,  4.80it/s]

 39%|███▊      | 487/1261 [01:33<02:33,  5.03it/s]

 39%|███▊      | 488/1261 [01:33<02:34,  5.00it/s]

 39%|███▉      | 489/1261 [01:33<02:34,  5.01it/s]

 39%|███▉      | 490/1261 [01:33<02:34,  5.01it/s]

 39%|███▉      | 491/1261 [01:33<02:32,  5.03it/s]

 39%|███▉      | 492/1261 [01:34<02:28,  5.18it/s]

 39%|███▉      | 493/1261 [01:34<02:26,  5.25it/s]

 39%|███▉      | 494/1261 [01:34<02:25,  5.27it/s]

 39%|███▉      | 495/1261 [01:34<02:33,  4.98it/s]

 39%|███▉      | 496/1261 [01:34<02:29,  5.12it/s]

 39%|███▉      | 497/1261 [01:35<02:35,  4.90it/s]

 39%|███▉      | 498/1261 [01:35<02:34,  4.92it/s]

 40%|███▉      | 499/1261 [01:35<02:33,  4.97it/s]

 40%|███▉      | 500/1261 [01:35<02:32,  5.01it/s]

 40%|███▉      | 501/1261 [01:35<02:28,  5.12it/s]

 40%|███▉      | 502/1261 [01:36<02:27,  5.14it/s]

 40%|███▉      | 503/1261 [01:36<02:30,  5.04it/s]

 40%|███▉      | 504/1261 [01:36<02:34,  4.89it/s]

 40%|████      | 505/1261 [01:36<02:36,  4.83it/s]

 40%|████      | 506/1261 [01:36<02:28,  5.08it/s]

 40%|████      | 507/1261 [01:37<02:29,  5.04it/s]

 40%|████      | 508/1261 [01:37<02:28,  5.07it/s]

 40%|████      | 509/1261 [01:37<02:27,  5.10it/s]

 40%|████      | 510/1261 [01:37<02:26,  5.13it/s]

 41%|████      | 511/1261 [01:37<02:24,  5.19it/s]

 41%|████      | 512/1261 [01:38<02:25,  5.15it/s]

 41%|████      | 513/1261 [01:38<02:23,  5.20it/s]

 41%|████      | 514/1261 [01:38<02:22,  5.26it/s]

 41%|████      | 515/1261 [01:38<02:26,  5.08it/s]

 41%|████      | 516/1261 [01:38<02:21,  5.26it/s]

 41%|████      | 517/1261 [01:38<02:17,  5.40it/s]

 41%|████      | 518/1261 [01:39<02:18,  5.35it/s]

 41%|████      | 519/1261 [01:39<02:21,  5.25it/s]

 41%|████      | 520/1261 [01:39<02:24,  5.12it/s]

 41%|████▏     | 521/1261 [01:39<02:22,  5.20it/s]

 41%|████▏     | 522/1261 [01:39<02:24,  5.11it/s]

 41%|████▏     | 523/1261 [01:40<02:18,  5.31it/s]

 42%|████▏     | 524/1261 [01:40<02:23,  5.15it/s]

 42%|████▏     | 525/1261 [01:40<02:20,  5.22it/s]

 42%|████▏     | 526/1261 [01:40<02:22,  5.15it/s]

 42%|████▏     | 527/1261 [01:40<02:23,  5.10it/s]

 42%|████▏     | 528/1261 [01:41<02:19,  5.24it/s]

 42%|████▏     | 529/1261 [01:41<02:22,  5.13it/s]

 42%|████▏     | 530/1261 [01:41<02:24,  5.06it/s]

 42%|████▏     | 531/1261 [01:41<02:24,  5.06it/s]

 42%|████▏     | 532/1261 [01:41<02:19,  5.24it/s]

 42%|████▏     | 533/1261 [01:42<02:20,  5.19it/s]

 42%|████▏     | 534/1261 [01:42<02:19,  5.21it/s]

 42%|████▏     | 535/1261 [01:42<02:15,  5.34it/s]

 43%|████▎     | 536/1261 [01:42<02:22,  5.11it/s]

 43%|████▎     | 537/1261 [01:42<02:17,  5.27it/s]

 43%|████▎     | 538/1261 [01:43<02:26,  4.94it/s]

 43%|████▎     | 539/1261 [01:43<02:21,  5.11it/s]

 43%|████▎     | 540/1261 [01:43<02:22,  5.06it/s]

 43%|████▎     | 541/1261 [01:43<02:23,  5.01it/s]

 43%|████▎     | 542/1261 [01:43<02:25,  4.93it/s]

 43%|████▎     | 543/1261 [01:44<02:19,  5.15it/s]

 43%|████▎     | 544/1261 [01:44<02:22,  5.04it/s]

 43%|████▎     | 545/1261 [01:44<02:21,  5.08it/s]

 43%|████▎     | 546/1261 [01:44<02:25,  4.92it/s]

 43%|████▎     | 547/1261 [01:44<02:17,  5.20it/s]

 43%|████▎     | 548/1261 [01:45<02:16,  5.21it/s]

 44%|████▎     | 549/1261 [01:45<02:18,  5.15it/s]

 44%|████▎     | 550/1261 [01:45<02:18,  5.15it/s]

 44%|████▎     | 551/1261 [01:45<02:15,  5.24it/s]

 44%|████▍     | 552/1261 [01:45<02:15,  5.23it/s]

 44%|████▍     | 553/1261 [01:46<02:15,  5.21it/s]

 44%|████▍     | 554/1261 [01:46<02:13,  5.28it/s]

 44%|████▍     | 555/1261 [01:46<02:14,  5.24it/s]

 44%|████▍     | 556/1261 [01:46<02:19,  5.06it/s]

 44%|████▍     | 557/1261 [01:46<02:29,  4.71it/s]

 44%|████▍     | 558/1261 [01:47<02:25,  4.83it/s]

 44%|████▍     | 559/1261 [01:47<02:30,  4.68it/s]

 44%|████▍     | 560/1261 [01:47<02:26,  4.79it/s]

 44%|████▍     | 561/1261 [01:47<02:29,  4.69it/s]

 45%|████▍     | 562/1261 [01:47<02:32,  4.60it/s]

 45%|████▍     | 563/1261 [01:48<02:27,  4.74it/s]

 45%|████▍     | 564/1261 [01:48<02:20,  4.97it/s]

 45%|████▍     | 565/1261 [01:48<02:14,  5.16it/s]

 45%|████▍     | 566/1261 [01:48<02:13,  5.20it/s]

 45%|████▍     | 567/1261 [01:48<02:13,  5.18it/s]

 45%|████▌     | 568/1261 [01:49<02:13,  5.18it/s]

 45%|████▌     | 569/1261 [01:49<02:17,  5.05it/s]

 45%|████▌     | 570/1261 [01:49<02:09,  5.34it/s]

 45%|████▌     | 571/1261 [01:49<02:17,  5.01it/s]

 45%|████▌     | 572/1261 [01:49<02:11,  5.25it/s]

 45%|████▌     | 573/1261 [01:49<02:08,  5.36it/s]

 46%|████▌     | 574/1261 [01:50<02:12,  5.17it/s]

 46%|████▌     | 575/1261 [01:50<02:07,  5.39it/s]

 46%|████▌     | 576/1261 [01:50<02:12,  5.16it/s]

 46%|████▌     | 577/1261 [01:50<02:14,  5.10it/s]

 46%|████▌     | 578/1261 [01:50<02:16,  5.01it/s]

 46%|████▌     | 579/1261 [01:51<02:16,  4.99it/s]

 46%|████▌     | 580/1261 [01:51<02:13,  5.11it/s]

 46%|████▌     | 581/1261 [01:51<02:09,  5.24it/s]

 46%|████▌     | 582/1261 [01:51<02:11,  5.17it/s]

 46%|████▌     | 583/1261 [01:51<02:12,  5.11it/s]

 46%|████▋     | 584/1261 [01:52<02:10,  5.19it/s]

 46%|████▋     | 585/1261 [01:52<02:12,  5.11it/s]

 46%|████▋     | 586/1261 [01:52<02:07,  5.28it/s]

 47%|████▋     | 587/1261 [01:52<02:10,  5.15it/s]

 47%|████▋     | 588/1261 [01:52<02:17,  4.91it/s]

 47%|████▋     | 589/1261 [01:53<02:20,  4.79it/s]

 47%|████▋     | 590/1261 [01:53<02:22,  4.72it/s]

 47%|████▋     | 591/1261 [01:53<02:17,  4.88it/s]

 47%|████▋     | 592/1261 [01:53<02:17,  4.86it/s]

 47%|████▋     | 593/1261 [01:53<02:17,  4.86it/s]

 47%|████▋     | 594/1261 [01:54<02:13,  4.99it/s]

 47%|████▋     | 595/1261 [01:54<02:15,  4.92it/s]

 47%|████▋     | 596/1261 [01:54<02:06,  5.25it/s]

 47%|████▋     | 597/1261 [01:54<02:11,  5.05it/s]

 47%|████▋     | 598/1261 [01:54<02:10,  5.06it/s]

 48%|████▊     | 599/1261 [01:55<02:11,  5.05it/s]

 48%|████▊     | 600/1261 [01:55<02:08,  5.14it/s]

 48%|████▊     | 601/1261 [01:55<02:10,  5.07it/s]

 48%|████▊     | 602/1261 [01:55<02:09,  5.09it/s]

 48%|████▊     | 603/1261 [01:55<02:14,  4.89it/s]

 48%|████▊     | 604/1261 [01:56<02:17,  4.78it/s]

 48%|████▊     | 605/1261 [01:56<02:12,  4.93it/s]

 48%|████▊     | 606/1261 [01:56<02:10,  5.02it/s]

 48%|████▊     | 607/1261 [01:56<02:14,  4.87it/s]

 48%|████▊     | 608/1261 [01:56<02:06,  5.17it/s]

 48%|████▊     | 609/1261 [01:57<02:07,  5.11it/s]

 48%|████▊     | 610/1261 [01:57<02:12,  4.90it/s]

 48%|████▊     | 611/1261 [01:57<02:09,  5.02it/s]

 49%|████▊     | 612/1261 [01:57<02:09,  5.01it/s]

 49%|████▊     | 613/1261 [01:57<02:07,  5.10it/s]

 49%|████▊     | 614/1261 [01:58<02:09,  5.01it/s]

 49%|████▉     | 615/1261 [01:58<02:08,  5.02it/s]

 49%|████▉     | 616/1261 [01:58<02:15,  4.77it/s]

 49%|████▉     | 617/1261 [01:58<02:17,  4.67it/s]

 49%|████▉     | 618/1261 [01:58<02:09,  4.96it/s]

 49%|████▉     | 619/1261 [01:59<02:10,  4.90it/s]

 49%|████▉     | 620/1261 [01:59<02:15,  4.72it/s]

 49%|████▉     | 621/1261 [01:59<02:12,  4.84it/s]

 49%|████▉     | 622/1261 [01:59<02:27,  4.32it/s]

 49%|████▉     | 623/1261 [02:00<02:30,  4.23it/s]

 49%|████▉     | 624/1261 [02:00<02:27,  4.33it/s]

 50%|████▉     | 625/1261 [02:00<02:31,  4.20it/s]

 50%|████▉     | 626/1261 [02:00<02:32,  4.16it/s]

 50%|████▉     | 627/1261 [02:01<02:22,  4.45it/s]

 50%|████▉     | 628/1261 [02:01<02:20,  4.50it/s]

 50%|████▉     | 629/1261 [02:01<02:09,  4.87it/s]

 50%|████▉     | 630/1261 [02:01<02:11,  4.81it/s]

 50%|█████     | 631/1261 [02:01<02:08,  4.89it/s]

 50%|█████     | 632/1261 [02:02<02:09,  4.85it/s]

 50%|█████     | 633/1261 [02:02<02:11,  4.77it/s]

 50%|█████     | 634/1261 [02:02<02:09,  4.85it/s]

 50%|█████     | 635/1261 [02:02<02:09,  4.82it/s]

 50%|█████     | 636/1261 [02:02<02:05,  4.99it/s]

 51%|█████     | 637/1261 [02:03<02:03,  5.06it/s]

 51%|█████     | 638/1261 [02:03<02:03,  5.06it/s]

 51%|█████     | 639/1261 [02:03<02:00,  5.18it/s]

 51%|█████     | 640/1261 [02:03<02:01,  5.09it/s]

 51%|█████     | 641/1261 [02:03<01:58,  5.22it/s]

 51%|█████     | 642/1261 [02:04<01:58,  5.22it/s]

 51%|█████     | 643/1261 [02:04<01:57,  5.26it/s]

 51%|█████     | 644/1261 [02:04<01:56,  5.29it/s]

 51%|█████     | 645/1261 [02:04<02:01,  5.09it/s]

 51%|█████     | 646/1261 [02:04<02:03,  4.97it/s]

 51%|█████▏    | 647/1261 [02:05<02:08,  4.79it/s]

 51%|█████▏    | 648/1261 [02:05<02:06,  4.84it/s]

 51%|█████▏    | 649/1261 [02:05<02:04,  4.92it/s]

 52%|█████▏    | 650/1261 [02:05<02:09,  4.71it/s]

 52%|█████▏    | 651/1261 [02:05<02:08,  4.75it/s]

 52%|█████▏    | 652/1261 [02:06<02:09,  4.71it/s]

 52%|█████▏    | 653/1261 [02:06<02:04,  4.87it/s]

 52%|█████▏    | 654/1261 [02:06<02:10,  4.66it/s]

 52%|█████▏    | 655/1261 [02:06<02:08,  4.73it/s]

 52%|█████▏    | 656/1261 [02:06<02:11,  4.60it/s]

 52%|█████▏    | 657/1261 [02:07<02:07,  4.74it/s]

 52%|█████▏    | 658/1261 [02:07<02:05,  4.82it/s]

 52%|█████▏    | 659/1261 [02:07<02:07,  4.71it/s]

 52%|█████▏    | 660/1261 [02:07<02:15,  4.45it/s]

 52%|█████▏    | 661/1261 [02:08<02:05,  4.78it/s]

 52%|█████▏    | 662/1261 [02:08<02:07,  4.69it/s]

 53%|█████▎    | 663/1261 [02:08<02:04,  4.81it/s]

 53%|█████▎    | 664/1261 [02:08<02:01,  4.92it/s]

 53%|█████▎    | 665/1261 [02:08<02:02,  4.87it/s]

 53%|█████▎    | 666/1261 [02:09<02:02,  4.86it/s]

 53%|█████▎    | 667/1261 [02:09<02:02,  4.85it/s]

 53%|█████▎    | 668/1261 [02:09<02:05,  4.72it/s]

 53%|█████▎    | 669/1261 [02:09<02:07,  4.66it/s]

 53%|█████▎    | 670/1261 [02:09<02:03,  4.80it/s]

 53%|█████▎    | 671/1261 [02:10<02:00,  4.89it/s]

 53%|█████▎    | 672/1261 [02:10<02:02,  4.80it/s]

 53%|█████▎    | 673/1261 [02:10<02:03,  4.77it/s]

 53%|█████▎    | 674/1261 [02:10<02:05,  4.68it/s]

 54%|█████▎    | 675/1261 [02:10<02:11,  4.47it/s]

 54%|█████▎    | 676/1261 [02:11<02:05,  4.68it/s]

 54%|█████▎    | 677/1261 [02:11<02:04,  4.69it/s]

 54%|█████▍    | 678/1261 [02:11<02:04,  4.67it/s]

 54%|█████▍    | 679/1261 [02:11<02:02,  4.76it/s]

 54%|█████▍    | 680/1261 [02:11<01:58,  4.90it/s]

 54%|█████▍    | 681/1261 [02:12<01:59,  4.85it/s]

 54%|█████▍    | 682/1261 [02:12<02:03,  4.70it/s]

 54%|█████▍    | 683/1261 [02:12<02:02,  4.70it/s]

 54%|█████▍    | 684/1261 [02:12<02:04,  4.62it/s]

 54%|█████▍    | 685/1261 [02:13<01:59,  4.82it/s]

 54%|█████▍    | 686/1261 [02:13<02:00,  4.79it/s]

 54%|█████▍    | 687/1261 [02:13<01:51,  5.14it/s]

 55%|█████▍    | 688/1261 [02:13<01:56,  4.91it/s]

 55%|█████▍    | 689/1261 [02:13<02:00,  4.75it/s]

 55%|█████▍    | 690/1261 [02:14<01:54,  5.01it/s]

 55%|█████▍    | 691/1261 [02:14<01:57,  4.86it/s]

 55%|█████▍    | 692/1261 [02:14<01:54,  4.96it/s]

 55%|█████▍    | 693/1261 [02:14<01:54,  4.95it/s]

 55%|█████▌    | 694/1261 [02:14<01:55,  4.93it/s]

 55%|█████▌    | 695/1261 [02:15<01:55,  4.90it/s]

 55%|█████▌    | 696/1261 [02:15<01:58,  4.75it/s]

 55%|█████▌    | 697/1261 [02:15<01:56,  4.84it/s]

 55%|█████▌    | 698/1261 [02:15<01:56,  4.84it/s]

 55%|█████▌    | 699/1261 [02:15<01:50,  5.08it/s]

 56%|█████▌    | 700/1261 [02:16<01:52,  4.98it/s]

 56%|█████▌    | 701/1261 [02:16<01:48,  5.14it/s]

 56%|█████▌    | 702/1261 [02:16<01:50,  5.06it/s]

 56%|█████▌    | 703/1261 [02:16<01:45,  5.30it/s]

 56%|█████▌    | 704/1261 [02:16<01:51,  4.99it/s]

 56%|█████▌    | 705/1261 [02:17<01:50,  5.01it/s]

 56%|█████▌    | 706/1261 [02:17<01:55,  4.80it/s]

 56%|█████▌    | 707/1261 [02:17<01:49,  5.06it/s]

 56%|█████▌    | 708/1261 [02:17<01:50,  5.01it/s]

 56%|█████▌    | 709/1261 [02:17<01:46,  5.19it/s]

 56%|█████▋    | 710/1261 [02:18<01:44,  5.27it/s]

 56%|█████▋    | 711/1261 [02:18<01:46,  5.18it/s]

 56%|█████▋    | 712/1261 [02:18<01:48,  5.08it/s]

 57%|█████▋    | 713/1261 [02:18<01:43,  5.31it/s]

 57%|█████▋    | 714/1261 [02:18<01:45,  5.21it/s]

 57%|█████▋    | 715/1261 [02:18<01:43,  5.30it/s]

 57%|█████▋    | 716/1261 [02:19<01:44,  5.22it/s]

 57%|█████▋    | 717/1261 [02:19<01:45,  5.16it/s]

 57%|█████▋    | 718/1261 [02:19<01:45,  5.14it/s]

 57%|█████▋    | 719/1261 [02:19<01:43,  5.22it/s]

 57%|█████▋    | 720/1261 [02:19<01:44,  5.19it/s]

 57%|█████▋    | 721/1261 [02:20<01:45,  5.12it/s]

 57%|█████▋    | 722/1261 [02:20<01:46,  5.08it/s]

 57%|█████▋    | 723/1261 [02:20<01:45,  5.08it/s]

 57%|█████▋    | 724/1261 [02:20<01:44,  5.16it/s]

 57%|█████▋    | 725/1261 [02:20<01:42,  5.24it/s]

 58%|█████▊    | 726/1261 [02:21<01:42,  5.24it/s]

 58%|█████▊    | 727/1261 [02:21<01:43,  5.15it/s]

 58%|█████▊    | 728/1261 [02:21<01:41,  5.25it/s]

 58%|█████▊    | 729/1261 [02:21<01:40,  5.27it/s]

 58%|█████▊    | 730/1261 [02:21<01:42,  5.17it/s]

 58%|█████▊    | 731/1261 [02:22<01:40,  5.26it/s]

 58%|█████▊    | 732/1261 [02:22<01:44,  5.08it/s]

 58%|█████▊    | 733/1261 [02:22<01:41,  5.18it/s]

 58%|█████▊    | 734/1261 [02:22<01:43,  5.10it/s]

 58%|█████▊    | 735/1261 [02:22<01:43,  5.08it/s]

 58%|█████▊    | 736/1261 [02:23<01:46,  4.92it/s]

 58%|█████▊    | 737/1261 [02:23<01:41,  5.16it/s]

 59%|█████▊    | 738/1261 [02:23<01:43,  5.03it/s]

 59%|█████▊    | 739/1261 [02:23<01:42,  5.10it/s]

 59%|█████▊    | 740/1261 [02:23<01:43,  5.05it/s]

 59%|█████▉    | 741/1261 [02:24<01:42,  5.07it/s]

 59%|█████▉    | 742/1261 [02:24<01:40,  5.17it/s]

 59%|█████▉    | 743/1261 [02:24<01:44,  4.96it/s]

 59%|█████▉    | 744/1261 [02:24<01:38,  5.23it/s]

 59%|█████▉    | 745/1261 [02:24<01:39,  5.19it/s]

 59%|█████▉    | 746/1261 [02:25<01:39,  5.16it/s]

 59%|█████▉    | 747/1261 [02:25<01:38,  5.24it/s]

 59%|█████▉    | 748/1261 [02:25<01:35,  5.36it/s]

 59%|█████▉    | 749/1261 [02:25<01:37,  5.26it/s]

 59%|█████▉    | 750/1261 [02:25<01:40,  5.10it/s]

 60%|█████▉    | 751/1261 [02:26<01:41,  5.03it/s]

 60%|█████▉    | 752/1261 [02:26<01:41,  5.04it/s]

 60%|█████▉    | 753/1261 [02:26<01:39,  5.13it/s]

 60%|█████▉    | 754/1261 [02:26<01:40,  5.03it/s]

 60%|█████▉    | 755/1261 [02:26<01:37,  5.17it/s]

 60%|█████▉    | 756/1261 [02:26<01:35,  5.27it/s]

 60%|██████    | 757/1261 [02:27<01:39,  5.06it/s]

 60%|██████    | 758/1261 [02:27<01:38,  5.10it/s]

 60%|██████    | 759/1261 [02:27<01:36,  5.21it/s]

 60%|██████    | 760/1261 [02:27<01:37,  5.13it/s]

 60%|██████    | 761/1261 [02:27<01:37,  5.13it/s]

 60%|██████    | 762/1261 [02:28<01:38,  5.08it/s]

 61%|██████    | 763/1261 [02:28<01:38,  5.06it/s]

 61%|██████    | 764/1261 [02:28<01:38,  5.03it/s]

 61%|██████    | 765/1261 [02:28<01:38,  5.01it/s]

 61%|██████    | 766/1261 [02:28<01:37,  5.09it/s]

 61%|██████    | 767/1261 [02:29<01:39,  4.94it/s]

 61%|██████    | 768/1261 [02:29<01:35,  5.17it/s]

 61%|██████    | 769/1261 [02:29<01:38,  5.00it/s]

 61%|██████    | 770/1261 [02:29<01:36,  5.09it/s]

 61%|██████    | 771/1261 [02:29<01:33,  5.22it/s]

 61%|██████    | 772/1261 [02:30<01:36,  5.09it/s]

 61%|██████▏   | 773/1261 [02:30<01:36,  5.08it/s]

 61%|██████▏   | 774/1261 [02:30<01:37,  5.00it/s]

 61%|██████▏   | 775/1261 [02:30<01:36,  5.02it/s]

 62%|██████▏   | 776/1261 [02:30<01:38,  4.91it/s]

 62%|██████▏   | 777/1261 [02:31<01:36,  5.03it/s]

 62%|██████▏   | 778/1261 [02:31<01:37,  4.94it/s]

 62%|██████▏   | 779/1261 [02:31<01:34,  5.07it/s]

 62%|██████▏   | 780/1261 [02:31<01:35,  5.02it/s]

 62%|██████▏   | 781/1261 [02:31<01:33,  5.15it/s]

 62%|██████▏   | 782/1261 [02:32<01:36,  4.99it/s]

 62%|██████▏   | 783/1261 [02:32<01:33,  5.11it/s]

 62%|██████▏   | 784/1261 [02:32<01:38,  4.85it/s]

 62%|██████▏   | 785/1261 [02:32<01:41,  4.67it/s]

 62%|██████▏   | 786/1261 [02:32<01:41,  4.68it/s]

 62%|██████▏   | 787/1261 [02:33<01:38,  4.80it/s]

 62%|██████▏   | 788/1261 [02:33<01:39,  4.74it/s]

 63%|██████▎   | 789/1261 [02:33<01:33,  5.05it/s]

 63%|██████▎   | 790/1261 [02:33<01:35,  4.95it/s]

 63%|██████▎   | 791/1261 [02:33<01:34,  4.99it/s]

 63%|██████▎   | 792/1261 [02:34<01:35,  4.90it/s]

 63%|██████▎   | 793/1261 [02:34<01:32,  5.04it/s]

 63%|██████▎   | 794/1261 [02:34<01:31,  5.12it/s]

 63%|██████▎   | 795/1261 [02:34<01:31,  5.09it/s]

 63%|██████▎   | 796/1261 [02:34<01:31,  5.07it/s]

 63%|██████▎   | 797/1261 [02:35<01:30,  5.15it/s]

 63%|██████▎   | 798/1261 [02:35<01:30,  5.10it/s]

 63%|██████▎   | 799/1261 [02:35<01:32,  4.98it/s]

 63%|██████▎   | 800/1261 [02:35<01:32,  4.96it/s]

 64%|██████▎   | 801/1261 [02:35<01:35,  4.81it/s]

 64%|██████▎   | 802/1261 [02:36<01:37,  4.71it/s]

 64%|██████▎   | 803/1261 [02:36<01:34,  4.86it/s]

 64%|██████▍   | 804/1261 [02:36<01:34,  4.84it/s]

 64%|██████▍   | 805/1261 [02:36<01:31,  5.01it/s]

 64%|██████▍   | 806/1261 [02:36<01:31,  4.99it/s]

 64%|██████▍   | 807/1261 [02:37<01:27,  5.17it/s]

 64%|██████▍   | 808/1261 [02:37<01:29,  5.09it/s]

 64%|██████▍   | 809/1261 [02:37<01:26,  5.21it/s]

 64%|██████▍   | 810/1261 [02:37<01:30,  5.00it/s]

 64%|██████▍   | 811/1261 [02:37<01:31,  4.93it/s]

 64%|██████▍   | 812/1261 [02:38<01:29,  5.03it/s]

 64%|██████▍   | 813/1261 [02:38<01:29,  4.99it/s]

 65%|██████▍   | 814/1261 [02:38<01:26,  5.16it/s]

 65%|██████▍   | 815/1261 [02:38<01:26,  5.16it/s]

 65%|██████▍   | 816/1261 [02:38<01:26,  5.16it/s]

 65%|██████▍   | 817/1261 [02:39<01:25,  5.17it/s]

 65%|██████▍   | 818/1261 [02:39<01:24,  5.22it/s]

 65%|██████▍   | 819/1261 [02:39<01:24,  5.20it/s]

 65%|██████▌   | 820/1261 [02:39<01:26,  5.11it/s]

 65%|██████▌   | 821/1261 [02:39<01:24,  5.22it/s]

 65%|██████▌   | 822/1261 [02:40<01:24,  5.19it/s]

 65%|██████▌   | 823/1261 [02:40<01:25,  5.14it/s]

 65%|██████▌   | 824/1261 [02:40<01:25,  5.09it/s]

 65%|██████▌   | 825/1261 [02:40<01:29,  4.86it/s]

 66%|██████▌   | 826/1261 [02:40<01:24,  5.13it/s]

 66%|██████▌   | 827/1261 [02:41<01:29,  4.85it/s]

 66%|██████▌   | 828/1261 [02:41<01:30,  4.77it/s]

 66%|██████▌   | 829/1261 [02:41<01:30,  4.77it/s]

 66%|██████▌   | 830/1261 [02:41<01:29,  4.84it/s]

 66%|██████▌   | 831/1261 [02:41<01:28,  4.84it/s]

 66%|██████▌   | 832/1261 [02:42<01:23,  5.13it/s]

 66%|██████▌   | 833/1261 [02:42<01:21,  5.26it/s]

 66%|██████▌   | 834/1261 [02:42<01:24,  5.04it/s]

 66%|██████▌   | 835/1261 [02:42<01:21,  5.20it/s]

 66%|██████▋   | 836/1261 [02:42<01:21,  5.20it/s]

 66%|██████▋   | 837/1261 [02:43<01:22,  5.15it/s]

 66%|██████▋   | 838/1261 [02:43<01:21,  5.19it/s]

 67%|██████▋   | 839/1261 [02:43<01:21,  5.17it/s]

 67%|██████▋   | 840/1261 [02:43<01:23,  5.03it/s]

 67%|██████▋   | 841/1261 [02:43<01:21,  5.13it/s]

 67%|██████▋   | 842/1261 [02:44<01:25,  4.88it/s]

 67%|██████▋   | 843/1261 [02:44<01:21,  5.11it/s]

 67%|██████▋   | 844/1261 [02:44<01:27,  4.75it/s]

 67%|██████▋   | 845/1261 [02:44<01:26,  4.80it/s]

 67%|██████▋   | 846/1261 [02:44<01:29,  4.66it/s]

 67%|██████▋   | 847/1261 [02:45<01:26,  4.79it/s]

 67%|██████▋   | 848/1261 [02:45<01:29,  4.64it/s]

 67%|██████▋   | 849/1261 [02:45<01:25,  4.82it/s]

 67%|██████▋   | 850/1261 [02:45<01:26,  4.73it/s]

 67%|██████▋   | 851/1261 [02:46<01:27,  4.68it/s]

 68%|██████▊   | 852/1261 [02:46<01:26,  4.71it/s]

 68%|██████▊   | 853/1261 [02:46<01:27,  4.69it/s]

 68%|██████▊   | 854/1261 [02:46<01:23,  4.85it/s]

 68%|██████▊   | 855/1261 [02:46<01:22,  4.91it/s]

 68%|██████▊   | 856/1261 [02:47<01:21,  4.95it/s]

 68%|██████▊   | 857/1261 [02:47<01:22,  4.92it/s]

 68%|██████▊   | 858/1261 [02:47<01:24,  4.78it/s]

 68%|██████▊   | 859/1261 [02:47<01:20,  4.97it/s]

 68%|██████▊   | 860/1261 [02:47<01:22,  4.89it/s]

 68%|██████▊   | 861/1261 [02:48<01:18,  5.10it/s]

 68%|██████▊   | 862/1261 [02:48<01:21,  4.91it/s]

 68%|██████▊   | 863/1261 [02:48<01:17,  5.15it/s]

 69%|██████▊   | 864/1261 [02:48<01:17,  5.10it/s]

 69%|██████▊   | 865/1261 [02:48<01:17,  5.10it/s]

 69%|██████▊   | 866/1261 [02:49<01:18,  5.03it/s]

 69%|██████▉   | 867/1261 [02:49<01:16,  5.15it/s]

 69%|██████▉   | 868/1261 [02:49<01:20,  4.87it/s]

 69%|██████▉   | 869/1261 [02:49<01:16,  5.13it/s]

 69%|██████▉   | 870/1261 [02:49<01:18,  4.97it/s]

 69%|██████▉   | 871/1261 [02:50<01:16,  5.12it/s]

 69%|██████▉   | 872/1261 [02:50<01:14,  5.21it/s]

 69%|██████▉   | 873/1261 [02:50<01:16,  5.09it/s]

 69%|██████▉   | 874/1261 [02:50<01:17,  5.02it/s]

 69%|██████▉   | 875/1261 [02:50<01:21,  4.75it/s]

 69%|██████▉   | 876/1261 [02:51<01:20,  4.78it/s]

 70%|██████▉   | 877/1261 [02:51<01:18,  4.90it/s]

 70%|██████▉   | 878/1261 [02:51<01:17,  4.93it/s]

 70%|██████▉   | 879/1261 [02:51<01:15,  5.05it/s]

 70%|██████▉   | 880/1261 [02:51<01:18,  4.88it/s]

 70%|██████▉   | 881/1261 [02:52<01:17,  4.93it/s]

 70%|██████▉   | 882/1261 [02:52<01:19,  4.80it/s]

 70%|███████   | 883/1261 [02:52<01:14,  5.05it/s]

 70%|███████   | 884/1261 [02:52<01:17,  4.87it/s]

 70%|███████   | 885/1261 [02:52<01:15,  4.98it/s]

 70%|███████   | 886/1261 [02:53<01:16,  4.91it/s]

 70%|███████   | 887/1261 [02:53<01:14,  5.01it/s]

 70%|███████   | 888/1261 [02:53<01:19,  4.68it/s]

 70%|███████   | 889/1261 [02:53<01:18,  4.76it/s]

 71%|███████   | 890/1261 [02:53<01:16,  4.87it/s]

 71%|███████   | 891/1261 [02:54<01:15,  4.89it/s]

 71%|███████   | 892/1261 [02:54<01:11,  5.15it/s]

 71%|███████   | 893/1261 [02:54<01:17,  4.77it/s]

 71%|███████   | 894/1261 [02:54<01:14,  4.93it/s]

 71%|███████   | 895/1261 [02:54<01:15,  4.84it/s]

 71%|███████   | 896/1261 [02:55<01:15,  4.81it/s]

 71%|███████   | 897/1261 [02:55<01:14,  4.91it/s]

 71%|███████   | 898/1261 [02:55<01:13,  4.91it/s]

 71%|███████▏  | 899/1261 [02:55<01:11,  5.06it/s]

 71%|███████▏  | 900/1261 [02:55<01:10,  5.12it/s]

 71%|███████▏  | 901/1261 [02:56<01:11,  5.01it/s]

 72%|███████▏  | 902/1261 [02:56<01:10,  5.08it/s]

 72%|███████▏  | 903/1261 [02:56<01:14,  4.80it/s]

 72%|███████▏  | 904/1261 [02:56<01:12,  4.94it/s]

 72%|███████▏  | 905/1261 [02:56<01:14,  4.80it/s]

 72%|███████▏  | 906/1261 [02:57<01:11,  4.97it/s]

 72%|███████▏  | 907/1261 [02:57<01:13,  4.79it/s]

 72%|███████▏  | 908/1261 [02:57<01:11,  4.96it/s]

 72%|███████▏  | 909/1261 [02:57<01:11,  4.93it/s]

 72%|███████▏  | 910/1261 [02:57<01:10,  4.97it/s]

 72%|███████▏  | 911/1261 [02:58<01:14,  4.72it/s]

 72%|███████▏  | 912/1261 [02:58<01:11,  4.91it/s]

 72%|███████▏  | 913/1261 [02:58<01:11,  4.85it/s]

 72%|███████▏  | 914/1261 [02:58<01:14,  4.68it/s]

 73%|███████▎  | 915/1261 [02:58<01:10,  4.94it/s]

 73%|███████▎  | 916/1261 [02:59<01:07,  5.08it/s]

 73%|███████▎  | 917/1261 [02:59<01:10,  4.91it/s]

 73%|███████▎  | 918/1261 [02:59<01:10,  4.90it/s]

 73%|███████▎  | 919/1261 [02:59<01:11,  4.80it/s]

 73%|███████▎  | 920/1261 [03:00<01:13,  4.63it/s]

 73%|███████▎  | 921/1261 [03:00<01:09,  4.91it/s]

 73%|███████▎  | 922/1261 [03:00<01:10,  4.78it/s]

 73%|███████▎  | 923/1261 [03:00<01:08,  4.95it/s]

 73%|███████▎  | 924/1261 [03:00<01:10,  4.81it/s]

 73%|███████▎  | 925/1261 [03:01<01:10,  4.77it/s]

 73%|███████▎  | 926/1261 [03:01<01:09,  4.83it/s]

 74%|███████▎  | 927/1261 [03:01<01:09,  4.81it/s]

 74%|███████▎  | 928/1261 [03:01<01:10,  4.74it/s]

 74%|███████▎  | 929/1261 [03:01<01:06,  4.99it/s]

 74%|███████▍  | 930/1261 [03:02<01:07,  4.90it/s]

 74%|███████▍  | 931/1261 [03:02<01:04,  5.08it/s]

 74%|███████▍  | 932/1261 [03:02<01:06,  4.97it/s]

 74%|███████▍  | 933/1261 [03:02<01:07,  4.86it/s]

 74%|███████▍  | 934/1261 [03:02<01:09,  4.68it/s]

 74%|███████▍  | 935/1261 [03:03<01:07,  4.82it/s]

 74%|███████▍  | 936/1261 [03:03<01:07,  4.78it/s]

 74%|███████▍  | 937/1261 [03:03<01:05,  4.98it/s]

 74%|███████▍  | 938/1261 [03:03<01:04,  4.99it/s]

 74%|███████▍  | 939/1261 [03:03<01:02,  5.14it/s]

 75%|███████▍  | 940/1261 [03:04<01:06,  4.84it/s]

 75%|███████▍  | 941/1261 [03:04<01:09,  4.61it/s]

 75%|███████▍  | 942/1261 [03:04<01:06,  4.81it/s]

 75%|███████▍  | 943/1261 [03:04<01:05,  4.82it/s]

 75%|███████▍  | 944/1261 [03:04<01:03,  5.00it/s]

 75%|███████▍  | 945/1261 [03:05<01:03,  4.94it/s]

 75%|███████▌  | 946/1261 [03:05<01:04,  4.90it/s]

 75%|███████▌  | 947/1261 [03:05<01:02,  5.05it/s]

 75%|███████▌  | 948/1261 [03:05<01:03,  4.97it/s]

 75%|███████▌  | 949/1261 [03:05<01:05,  4.79it/s]

 75%|███████▌  | 950/1261 [03:06<01:03,  4.87it/s]

 75%|███████▌  | 951/1261 [03:06<01:03,  4.89it/s]

 75%|███████▌  | 952/1261 [03:06<01:05,  4.72it/s]

 76%|███████▌  | 953/1261 [03:06<01:02,  4.93it/s]

 76%|███████▌  | 954/1261 [03:06<01:01,  5.00it/s]

 76%|███████▌  | 955/1261 [03:07<01:02,  4.90it/s]

 76%|███████▌  | 956/1261 [03:07<01:00,  5.03it/s]

 76%|███████▌  | 957/1261 [03:07<01:00,  4.99it/s]

 76%|███████▌  | 958/1261 [03:07<01:08,  4.42it/s]

 76%|███████▌  | 959/1261 [03:08<01:05,  4.60it/s]

 76%|███████▌  | 960/1261 [03:08<01:08,  4.40it/s]

 76%|███████▌  | 961/1261 [03:08<01:14,  4.05it/s]

 76%|███████▋  | 962/1261 [03:08<01:11,  4.19it/s]

 76%|███████▋  | 963/1261 [03:09<01:07,  4.40it/s]

 76%|███████▋  | 964/1261 [03:09<01:11,  4.13it/s]

 77%|███████▋  | 965/1261 [03:09<01:12,  4.08it/s]

 77%|███████▋  | 966/1261 [03:09<01:13,  3.99it/s]

 77%|███████▋  | 967/1261 [03:10<01:11,  4.11it/s]

 77%|███████▋  | 968/1261 [03:10<01:08,  4.26it/s]

 77%|███████▋  | 969/1261 [03:10<01:07,  4.30it/s]

 77%|███████▋  | 970/1261 [03:10<01:06,  4.36it/s]

 77%|███████▋  | 971/1261 [03:10<01:05,  4.43it/s]

 77%|███████▋  | 972/1261 [03:11<01:06,  4.37it/s]

 77%|███████▋  | 973/1261 [03:11<01:07,  4.27it/s]

 77%|███████▋  | 974/1261 [03:11<01:04,  4.43it/s]

 77%|███████▋  | 975/1261 [03:11<01:06,  4.32it/s]

 77%|███████▋  | 976/1261 [03:12<01:02,  4.53it/s]

 77%|███████▋  | 977/1261 [03:12<01:01,  4.59it/s]

 78%|███████▊  | 978/1261 [03:12<00:59,  4.77it/s]

 78%|███████▊  | 979/1261 [03:12<00:58,  4.85it/s]

 78%|███████▊  | 980/1261 [03:12<00:58,  4.77it/s]

 78%|███████▊  | 981/1261 [03:13<00:56,  4.93it/s]

 78%|███████▊  | 982/1261 [03:13<00:57,  4.85it/s]

 78%|███████▊  | 983/1261 [03:13<00:59,  4.63it/s]

 78%|███████▊  | 984/1261 [03:13<00:59,  4.63it/s]

 78%|███████▊  | 985/1261 [03:13<00:59,  4.63it/s]

 78%|███████▊  | 986/1261 [03:14<01:01,  4.49it/s]

 78%|███████▊  | 987/1261 [03:14<01:02,  4.41it/s]

 78%|███████▊  | 988/1261 [03:14<01:03,  4.27it/s]

 78%|███████▊  | 989/1261 [03:14<00:59,  4.56it/s]

 79%|███████▊  | 990/1261 [03:15<00:56,  4.79it/s]

 79%|███████▊  | 991/1261 [03:15<00:54,  4.94it/s]

 79%|███████▊  | 992/1261 [03:15<00:54,  4.93it/s]

 79%|███████▊  | 993/1261 [03:15<00:56,  4.75it/s]

 79%|███████▉  | 994/1261 [03:15<00:59,  4.49it/s]

 79%|███████▉  | 995/1261 [03:16<00:57,  4.65it/s]

 79%|███████▉  | 996/1261 [03:16<00:57,  4.60it/s]

 79%|███████▉  | 997/1261 [03:16<00:54,  4.83it/s]

 79%|███████▉  | 998/1261 [03:16<00:55,  4.70it/s]

 79%|███████▉  | 999/1261 [03:16<00:54,  4.79it/s]

 79%|███████▉  | 1000/1261 [03:17<00:55,  4.67it/s]

 79%|███████▉  | 1001/1261 [03:17<00:53,  4.89it/s]

 79%|███████▉  | 1002/1261 [03:17<00:52,  4.94it/s]

 80%|███████▉  | 1003/1261 [03:17<00:53,  4.82it/s]

 80%|███████▉  | 1004/1261 [03:17<00:54,  4.73it/s]

 80%|███████▉  | 1005/1261 [03:18<00:55,  4.61it/s]

 80%|███████▉  | 1006/1261 [03:18<00:55,  4.63it/s]

 80%|███████▉  | 1007/1261 [03:18<00:55,  4.56it/s]

 80%|███████▉  | 1008/1261 [03:18<00:54,  4.68it/s]

 80%|████████  | 1009/1261 [03:19<00:52,  4.78it/s]

 80%|████████  | 1010/1261 [03:19<00:50,  4.98it/s]

 80%|████████  | 1011/1261 [03:19<00:50,  4.91it/s]

 80%|████████  | 1012/1261 [03:19<00:49,  5.02it/s]

 80%|████████  | 1013/1261 [03:19<00:50,  4.90it/s]

 80%|████████  | 1014/1261 [03:20<00:49,  4.98it/s]

 80%|████████  | 1015/1261 [03:20<00:51,  4.77it/s]

 81%|████████  | 1016/1261 [03:20<00:49,  4.91it/s]

 81%|████████  | 1017/1261 [03:20<00:49,  4.89it/s]

 81%|████████  | 1018/1261 [03:20<00:49,  4.95it/s]

 81%|████████  | 1019/1261 [03:21<00:51,  4.67it/s]

 81%|████████  | 1020/1261 [03:21<00:52,  4.59it/s]

 81%|████████  | 1021/1261 [03:21<00:52,  4.55it/s]

 81%|████████  | 1022/1261 [03:21<00:51,  4.65it/s]

 81%|████████  | 1023/1261 [03:21<00:51,  4.59it/s]

 81%|████████  | 1024/1261 [03:22<00:50,  4.74it/s]

 81%|████████▏ | 1025/1261 [03:22<00:52,  4.54it/s]

 81%|████████▏ | 1026/1261 [03:22<00:48,  4.82it/s]

 81%|████████▏ | 1027/1261 [03:22<00:48,  4.79it/s]

 82%|████████▏ | 1028/1261 [03:22<00:46,  4.99it/s]

 82%|████████▏ | 1029/1261 [03:23<00:47,  4.87it/s]

 82%|████████▏ | 1030/1261 [03:23<00:46,  5.00it/s]

 82%|████████▏ | 1031/1261 [03:23<00:47,  4.82it/s]

 82%|████████▏ | 1032/1261 [03:23<00:45,  4.98it/s]

 82%|████████▏ | 1033/1261 [03:23<00:44,  5.17it/s]

 82%|████████▏ | 1034/1261 [03:24<00:45,  4.99it/s]

 82%|████████▏ | 1035/1261 [03:24<00:47,  4.79it/s]

 82%|████████▏ | 1036/1261 [03:24<00:45,  4.94it/s]

 82%|████████▏ | 1037/1261 [03:24<00:46,  4.82it/s]

 82%|████████▏ | 1038/1261 [03:25<00:46,  4.78it/s]

 82%|████████▏ | 1039/1261 [03:25<00:48,  4.55it/s]

 82%|████████▏ | 1040/1261 [03:25<00:45,  4.84it/s]

 83%|████████▎ | 1041/1261 [03:25<00:44,  4.94it/s]

 83%|████████▎ | 1042/1261 [03:25<00:45,  4.78it/s]

 83%|████████▎ | 1043/1261 [03:26<00:43,  4.98it/s]

 83%|████████▎ | 1044/1261 [03:26<00:45,  4.78it/s]

 83%|████████▎ | 1045/1261 [03:26<00:46,  4.68it/s]

 83%|████████▎ | 1046/1261 [03:26<00:45,  4.73it/s]

 83%|████████▎ | 1047/1261 [03:26<00:45,  4.70it/s]

 83%|████████▎ | 1048/1261 [03:27<00:43,  4.85it/s]

 83%|████████▎ | 1049/1261 [03:27<00:44,  4.79it/s]

 83%|████████▎ | 1050/1261 [03:27<00:44,  4.71it/s]

 83%|████████▎ | 1051/1261 [03:27<00:43,  4.88it/s]

 83%|████████▎ | 1052/1261 [03:27<00:44,  4.67it/s]

 84%|████████▎ | 1053/1261 [03:28<00:45,  4.57it/s]

 84%|████████▎ | 1054/1261 [03:28<00:43,  4.72it/s]

 84%|████████▎ | 1055/1261 [03:28<00:43,  4.76it/s]

 84%|████████▎ | 1056/1261 [03:28<00:42,  4.86it/s]

 84%|████████▍ | 1057/1261 [03:29<00:41,  4.86it/s]

 84%|████████▍ | 1058/1261 [03:29<00:40,  4.95it/s]

 84%|████████▍ | 1059/1261 [03:29<00:41,  4.85it/s]

 84%|████████▍ | 1060/1261 [03:29<00:43,  4.61it/s]

 84%|████████▍ | 1061/1261 [03:29<00:42,  4.71it/s]

 84%|████████▍ | 1062/1261 [03:30<00:44,  4.52it/s]

 84%|████████▍ | 1063/1261 [03:30<00:42,  4.62it/s]

 84%|████████▍ | 1064/1261 [03:30<00:41,  4.71it/s]

 84%|████████▍ | 1065/1261 [03:30<00:41,  4.70it/s]

 85%|████████▍ | 1066/1261 [03:30<00:42,  4.63it/s]

 85%|████████▍ | 1067/1261 [03:31<00:44,  4.34it/s]

 85%|████████▍ | 1068/1261 [03:31<00:43,  4.42it/s]

 85%|████████▍ | 1069/1261 [03:31<00:45,  4.26it/s]

 85%|████████▍ | 1070/1261 [03:31<00:46,  4.13it/s]

 85%|████████▍ | 1071/1261 [03:32<00:52,  3.60it/s]

 85%|████████▌ | 1072/1261 [03:32<00:47,  3.98it/s]

 85%|████████▌ | 1073/1261 [03:32<00:44,  4.23it/s]

 85%|████████▌ | 1074/1261 [03:32<00:43,  4.30it/s]

 85%|████████▌ | 1075/1261 [03:33<00:46,  3.97it/s]

 85%|████████▌ | 1076/1261 [03:33<00:46,  4.00it/s]

 85%|████████▌ | 1077/1261 [03:33<00:47,  3.86it/s]

 85%|████████▌ | 1078/1261 [03:34<00:49,  3.70it/s]

 86%|████████▌ | 1079/1261 [03:34<00:48,  3.78it/s]

 86%|████████▌ | 1080/1261 [03:34<00:49,  3.64it/s]

 86%|████████▌ | 1081/1261 [03:34<00:47,  3.75it/s]

 86%|████████▌ | 1082/1261 [03:35<00:46,  3.88it/s]

 86%|████████▌ | 1083/1261 [03:35<00:45,  3.95it/s]

 86%|████████▌ | 1084/1261 [03:35<00:43,  4.10it/s]

 86%|████████▌ | 1085/1261 [03:35<00:43,  4.09it/s]

 86%|████████▌ | 1086/1261 [03:36<00:42,  4.14it/s]

 86%|████████▌ | 1087/1261 [03:36<00:41,  4.15it/s]

 86%|████████▋ | 1088/1261 [03:36<00:39,  4.36it/s]

 86%|████████▋ | 1089/1261 [03:36<00:39,  4.39it/s]

 86%|████████▋ | 1090/1261 [03:36<00:39,  4.35it/s]

 87%|████████▋ | 1091/1261 [03:37<00:38,  4.40it/s]

 87%|████████▋ | 1092/1261 [03:37<00:39,  4.24it/s]

 87%|████████▋ | 1093/1261 [03:37<00:37,  4.46it/s]

 87%|████████▋ | 1094/1261 [03:37<00:37,  4.46it/s]

 87%|████████▋ | 1095/1261 [03:38<00:36,  4.56it/s]

 87%|████████▋ | 1096/1261 [03:38<00:36,  4.47it/s]

 87%|████████▋ | 1097/1261 [03:38<00:37,  4.42it/s]

 87%|████████▋ | 1098/1261 [03:38<00:35,  4.61it/s]

 87%|████████▋ | 1099/1261 [03:38<00:35,  4.63it/s]

 87%|████████▋ | 1100/1261 [03:39<00:34,  4.73it/s]

 87%|████████▋ | 1101/1261 [03:39<00:34,  4.59it/s]

 87%|████████▋ | 1102/1261 [03:39<00:34,  4.58it/s]

 87%|████████▋ | 1103/1261 [03:39<00:34,  4.52it/s]

 88%|████████▊ | 1104/1261 [03:40<00:34,  4.51it/s]

 88%|████████▊ | 1105/1261 [03:40<00:33,  4.68it/s]

 88%|████████▊ | 1106/1261 [03:40<00:32,  4.79it/s]

 88%|████████▊ | 1107/1261 [03:40<00:32,  4.75it/s]

 88%|████████▊ | 1108/1261 [03:40<00:31,  4.80it/s]

 88%|████████▊ | 1109/1261 [03:41<00:33,  4.60it/s]

 88%|████████▊ | 1110/1261 [03:41<00:32,  4.71it/s]

 88%|████████▊ | 1111/1261 [03:41<00:32,  4.66it/s]

 88%|████████▊ | 1112/1261 [03:41<00:31,  4.76it/s]

 88%|████████▊ | 1113/1261 [03:41<00:31,  4.73it/s]

 88%|████████▊ | 1114/1261 [03:42<00:30,  4.80it/s]

 88%|████████▊ | 1115/1261 [03:42<00:30,  4.79it/s]

 89%|████████▊ | 1116/1261 [03:42<00:30,  4.70it/s]

 89%|████████▊ | 1117/1261 [03:42<00:29,  4.83it/s]

 89%|████████▊ | 1118/1261 [03:42<00:29,  4.78it/s]

 89%|████████▊ | 1119/1261 [03:43<00:29,  4.76it/s]

 89%|████████▉ | 1120/1261 [03:43<00:29,  4.84it/s]

 89%|████████▉ | 1121/1261 [03:43<00:29,  4.82it/s]

 89%|████████▉ | 1122/1261 [03:43<00:28,  4.88it/s]

 89%|████████▉ | 1123/1261 [03:43<00:28,  4.82it/s]

 89%|████████▉ | 1124/1261 [03:44<00:28,  4.87it/s]

 89%|████████▉ | 1125/1261 [03:44<00:30,  4.52it/s]

 89%|████████▉ | 1126/1261 [03:44<00:30,  4.40it/s]

 89%|████████▉ | 1127/1261 [03:44<00:30,  4.32it/s]

 89%|████████▉ | 1128/1261 [03:45<00:29,  4.51it/s]

 90%|████████▉ | 1129/1261 [03:45<00:29,  4.49it/s]

 90%|████████▉ | 1130/1261 [03:45<00:27,  4.72it/s]

 90%|████████▉ | 1131/1261 [03:45<00:28,  4.62it/s]

 90%|████████▉ | 1132/1261 [03:45<00:26,  4.89it/s]

 90%|████████▉ | 1133/1261 [03:46<00:27,  4.71it/s]

 90%|████████▉ | 1134/1261 [03:46<00:25,  4.89it/s]

 90%|█████████ | 1135/1261 [03:46<00:26,  4.84it/s]

 90%|█████████ | 1136/1261 [03:46<00:25,  4.90it/s]

 90%|█████████ | 1137/1261 [03:46<00:25,  4.87it/s]

 90%|█████████ | 1138/1261 [03:47<00:26,  4.56it/s]

 90%|█████████ | 1139/1261 [03:47<00:27,  4.51it/s]

 90%|█████████ | 1140/1261 [03:47<00:26,  4.56it/s]

 90%|█████████ | 1141/1261 [03:47<00:25,  4.69it/s]

 91%|█████████ | 1142/1261 [03:48<00:24,  4.80it/s]

 91%|█████████ | 1143/1261 [03:48<00:24,  4.83it/s]

 91%|█████████ | 1144/1261 [03:48<00:24,  4.75it/s]

 91%|█████████ | 1145/1261 [03:48<00:23,  4.85it/s]

 91%|█████████ | 1146/1261 [03:48<00:23,  4.91it/s]

 91%|█████████ | 1147/1261 [03:49<00:23,  4.90it/s]

 91%|█████████ | 1148/1261 [03:49<00:22,  4.93it/s]

 91%|█████████ | 1149/1261 [03:49<00:23,  4.86it/s]

 91%|█████████ | 1150/1261 [03:49<00:22,  4.84it/s]

 91%|█████████▏| 1151/1261 [03:49<00:22,  4.85it/s]

 91%|█████████▏| 1152/1261 [03:50<00:23,  4.63it/s]

 91%|█████████▏| 1153/1261 [03:50<00:23,  4.63it/s]

 92%|█████████▏| 1154/1261 [03:50<00:22,  4.81it/s]

 92%|█████████▏| 1155/1261 [03:50<00:21,  4.90it/s]

 92%|█████████▏| 1156/1261 [03:50<00:21,  4.93it/s]

 92%|█████████▏| 1157/1261 [03:51<00:21,  4.92it/s]

 92%|█████████▏| 1158/1261 [03:51<00:20,  4.96it/s]

 92%|█████████▏| 1159/1261 [03:51<00:21,  4.81it/s]

 92%|█████████▏| 1160/1261 [03:51<00:21,  4.69it/s]

 92%|█████████▏| 1161/1261 [03:52<00:21,  4.63it/s]

 92%|█████████▏| 1162/1261 [03:52<00:21,  4.62it/s]

 92%|█████████▏| 1163/1261 [03:52<00:21,  4.55it/s]

 92%|█████████▏| 1164/1261 [03:52<00:21,  4.52it/s]

 92%|█████████▏| 1165/1261 [03:52<00:20,  4.69it/s]

 92%|█████████▏| 1166/1261 [03:53<00:20,  4.74it/s]

 93%|█████████▎| 1167/1261 [03:53<00:19,  4.85it/s]

 93%|█████████▎| 1168/1261 [03:53<00:19,  4.81it/s]

 93%|█████████▎| 1169/1261 [03:53<00:19,  4.69it/s]

 93%|█████████▎| 1170/1261 [03:53<00:19,  4.58it/s]

 93%|█████████▎| 1171/1261 [03:54<00:19,  4.60it/s]

 93%|█████████▎| 1172/1261 [03:54<00:19,  4.63it/s]

 93%|█████████▎| 1173/1261 [03:54<00:18,  4.78it/s]

 93%|█████████▎| 1174/1261 [03:54<00:17,  5.00it/s]

 93%|█████████▎| 1175/1261 [03:54<00:17,  4.91it/s]

 93%|█████████▎| 1176/1261 [03:55<00:17,  4.96it/s]

 93%|█████████▎| 1177/1261 [03:55<00:16,  4.96it/s]

 93%|█████████▎| 1178/1261 [03:55<00:16,  4.93it/s]

 93%|█████████▎| 1179/1261 [03:55<00:16,  5.09it/s]

 94%|█████████▎| 1180/1261 [03:55<00:15,  5.13it/s]

 94%|█████████▎| 1181/1261 [03:56<00:16,  5.00it/s]

 94%|█████████▎| 1182/1261 [03:56<00:15,  5.08it/s]

 94%|█████████▍| 1183/1261 [03:56<00:15,  4.92it/s]

 94%|█████████▍| 1184/1261 [03:56<00:16,  4.72it/s]

 94%|█████████▍| 1185/1261 [03:56<00:15,  4.90it/s]

 94%|█████████▍| 1186/1261 [03:57<00:15,  4.82it/s]

 94%|█████████▍| 1187/1261 [03:57<00:14,  4.97it/s]

 94%|█████████▍| 1188/1261 [03:57<00:14,  4.88it/s]

 94%|█████████▍| 1189/1261 [03:57<00:15,  4.79it/s]

 94%|█████████▍| 1190/1261 [03:58<00:15,  4.66it/s]

 94%|█████████▍| 1191/1261 [03:58<00:14,  4.92it/s]

 95%|█████████▍| 1192/1261 [03:58<00:14,  4.85it/s]

 95%|█████████▍| 1193/1261 [03:58<00:13,  5.00it/s]

 95%|█████████▍| 1194/1261 [03:58<00:13,  4.92it/s]

 95%|█████████▍| 1195/1261 [03:59<00:13,  4.88it/s]

 95%|█████████▍| 1196/1261 [03:59<00:13,  4.71it/s]

 95%|█████████▍| 1197/1261 [03:59<00:13,  4.82it/s]

 95%|█████████▌| 1198/1261 [03:59<00:12,  4.92it/s]

 95%|█████████▌| 1199/1261 [03:59<00:13,  4.47it/s]

 95%|█████████▌| 1200/1261 [04:00<00:14,  4.07it/s]

 95%|█████████▌| 1201/1261 [04:00<00:15,  3.98it/s]

 95%|█████████▌| 1202/1261 [04:00<00:13,  4.28it/s]

 95%|█████████▌| 1203/1261 [04:00<00:13,  4.21it/s]

 95%|█████████▌| 1204/1261 [04:01<00:13,  4.27it/s]

 96%|█████████▌| 1205/1261 [04:01<00:12,  4.51it/s]

 96%|█████████▌| 1206/1261 [04:01<00:11,  4.61it/s]

 96%|█████████▌| 1207/1261 [04:01<00:11,  4.69it/s]

 96%|█████████▌| 1208/1261 [04:01<00:11,  4.64it/s]

 96%|█████████▌| 1209/1261 [04:02<00:11,  4.65it/s]

 96%|█████████▌| 1210/1261 [04:02<00:10,  4.66it/s]

 96%|█████████▌| 1211/1261 [04:02<00:10,  4.64it/s]

 96%|█████████▌| 1212/1261 [04:02<00:10,  4.72it/s]

 96%|█████████▌| 1213/1261 [04:03<00:10,  4.58it/s]

 96%|█████████▋| 1214/1261 [04:03<00:09,  4.72it/s]

 96%|█████████▋| 1215/1261 [04:03<00:10,  4.58it/s]

 96%|█████████▋| 1216/1261 [04:03<00:09,  4.82it/s]

 97%|█████████▋| 1217/1261 [04:03<00:09,  4.67it/s]

 97%|█████████▋| 1218/1261 [04:04<00:08,  4.94it/s]

 97%|█████████▋| 1219/1261 [04:04<00:08,  4.78it/s]

 97%|█████████▋| 1220/1261 [04:04<00:08,  4.97it/s]

 97%|█████████▋| 1221/1261 [04:04<00:08,  4.87it/s]

 97%|█████████▋| 1222/1261 [04:04<00:08,  4.65it/s]

 97%|█████████▋| 1223/1261 [04:05<00:07,  4.87it/s]

 97%|█████████▋| 1224/1261 [04:05<00:07,  4.89it/s]

 97%|█████████▋| 1225/1261 [04:05<00:07,  5.12it/s]

 97%|█████████▋| 1226/1261 [04:05<00:07,  4.99it/s]

 97%|█████████▋| 1227/1261 [04:05<00:06,  5.02it/s]

 97%|█████████▋| 1228/1261 [04:06<00:06,  4.98it/s]

 97%|█████████▋| 1229/1261 [04:06<00:06,  5.02it/s]

 98%|█████████▊| 1230/1261 [04:06<00:06,  4.82it/s]

 98%|█████████▊| 1231/1261 [04:06<00:05,  5.05it/s]

 98%|█████████▊| 1232/1261 [04:06<00:05,  4.88it/s]

 98%|█████████▊| 1233/1261 [04:07<00:05,  4.81it/s]

 98%|█████████▊| 1234/1261 [04:07<00:05,  4.88it/s]

 98%|█████████▊| 1235/1261 [04:07<00:05,  5.04it/s]

 98%|█████████▊| 1236/1261 [04:07<00:05,  4.86it/s]

 98%|█████████▊| 1237/1261 [04:07<00:04,  4.92it/s]

 98%|█████████▊| 1238/1261 [04:08<00:04,  4.98it/s]

 98%|█████████▊| 1239/1261 [04:08<00:04,  4.81it/s]

 98%|█████████▊| 1240/1261 [04:08<00:04,  4.78it/s]

 98%|█████████▊| 1241/1261 [04:08<00:04,  4.66it/s]

 98%|█████████▊| 1242/1261 [04:09<00:04,  4.54it/s]

 99%|█████████▊| 1243/1261 [04:09<00:03,  4.80it/s]

 99%|█████████▊| 1244/1261 [04:09<00:03,  4.66it/s]

 99%|█████████▊| 1245/1261 [04:09<00:03,  4.57it/s]

 99%|█████████▉| 1246/1261 [04:09<00:03,  4.70it/s]

 99%|█████████▉| 1247/1261 [04:10<00:02,  4.90it/s]

 99%|█████████▉| 1248/1261 [04:10<00:02,  4.66it/s]

 99%|█████████▉| 1249/1261 [04:10<00:02,  4.81it/s]

 99%|█████████▉| 1250/1261 [04:10<00:02,  4.73it/s]

 99%|█████████▉| 1251/1261 [04:10<00:02,  4.76it/s]

 99%|█████████▉| 1252/1261 [04:11<00:01,  4.71it/s]

 99%|█████████▉| 1253/1261 [04:11<00:01,  4.79it/s]

 99%|█████████▉| 1254/1261 [04:11<00:01,  4.69it/s]

100%|█████████▉| 1255/1261 [04:11<00:01,  4.83it/s]

100%|█████████▉| 1256/1261 [04:11<00:01,  4.66it/s]

100%|█████████▉| 1257/1261 [04:12<00:00,  4.86it/s]

100%|█████████▉| 1258/1261 [04:12<00:00,  4.83it/s]

100%|█████████▉| 1259/1261 [04:12<00:00,  4.83it/s]

100%|█████████▉| 1260/1261 [04:12<00:00,  4.67it/s]

[MoviePy] Done.
[MoviePy] >>>> Video ready: rad-test2-opt2.mp4 

CPU times: user 9min 21s, sys: 1.65 s, total: 9min 22s
Wall time: 4min 13s
In [ ]:
clip1 = VideoFileClip("bin-opt.mp4")
clip2 = VideoFileClip("bin-opt-raw.mp4")
clip3 = clip2.resize(0.25)
clip4 = VideoFileClip('peaks-opt.mp4')
clip5 = clip4.resize(0.25)
video = CompositeVideoClip([clip1,
                           clip3.set_pos((480,360)),
                           clip5.set_pos((480,180))])
%time video.write_videofile('composite.mp4', audio=False)
In [456]:
clip1 = VideoFileClip("total2-opt2.mp4")
clip2 = VideoFileClip("raw.mp4")
clip3 = clip2.resize(0.25)
clip4 = VideoFileClip('peak-opt2.mp4')
clip5 = clip4.resize(0.25)
clip6 = VideoFileClip('bin-opt2.mp4')
clip7 = clip6.resize(0.25)
video = CompositeVideoClip([clip1,
                           clip3.set_pos((640,0)),
                           clip5.set_pos((960,0)),
                           clip7.set_pos((960,180))])
%time video.write_videofile('total-pipeline.mp4', audio=False)
[MoviePy] >>>> Building video total-pipeline.mp4
[MoviePy] Writing video total-pipeline.mp4

  0%|          | 0/1261 [00:00<?, ?it/s]

  0%|          | 5/1261 [00:00<00:26, 47.46it/s]

  1%|          | 10/1261 [00:00<00:26, 47.32it/s]

  1%|          | 15/1261 [00:00<00:27, 45.95it/s]

  2%|▏         | 20/1261 [00:00<00:26, 46.02it/s]

  2%|▏         | 25/1261 [00:00<00:26, 45.89it/s]

  2%|▏         | 30/1261 [00:00<00:26, 46.21it/s]

  3%|▎         | 35/1261 [00:00<00:26, 46.24it/s]

  3%|▎         | 40/1261 [00:00<00:26, 45.75it/s]

  4%|▎         | 45/1261 [00:00<00:26, 45.47it/s]

  4%|▍         | 50/1261 [00:01<00:34, 35.16it/s]

  4%|▍         | 54/1261 [00:01<00:33, 35.59it/s]

  5%|▍         | 58/1261 [00:01<00:35, 34.33it/s]

  5%|▍         | 62/1261 [00:01<00:34, 34.42it/s]

  5%|▌         | 66/1261 [00:01<00:35, 33.55it/s]

  6%|▌         | 70/1261 [00:01<00:35, 34.02it/s]

  6%|▌         | 74/1261 [00:01<00:35, 33.52it/s]

  6%|▌         | 78/1261 [00:02<00:35, 33.80it/s]

  7%|▋         | 82/1261 [00:02<00:35, 33.12it/s]

  7%|▋         | 86/1261 [00:02<00:35, 33.04it/s]

  7%|▋         | 90/1261 [00:02<00:35, 33.09it/s]

  7%|▋         | 94/1261 [00:02<00:36, 32.15it/s]

  8%|▊         | 98/1261 [00:02<00:37, 31.22it/s]

  8%|▊         | 102/1261 [00:02<00:36, 32.18it/s]

  8%|▊         | 106/1261 [00:02<00:35, 32.58it/s]

  9%|▊         | 110/1261 [00:03<00:34, 32.94it/s]

  9%|▉         | 114/1261 [00:03<00:34, 33.24it/s]

  9%|▉         | 118/1261 [00:03<00:33, 33.62it/s]

 10%|▉         | 122/1261 [00:03<00:34, 33.13it/s]

 10%|▉         | 126/1261 [00:03<00:37, 30.06it/s]

 10%|█         | 130/1261 [00:03<00:37, 30.18it/s]

 11%|█         | 134/1261 [00:03<00:36, 30.77it/s]

 11%|█         | 138/1261 [00:03<00:36, 31.16it/s]

 11%|█▏        | 142/1261 [00:04<00:34, 31.99it/s]

 12%|█▏        | 146/1261 [00:04<00:34, 32.58it/s]

 12%|█▏        | 150/1261 [00:04<00:32, 33.78it/s]

 12%|█▏        | 154/1261 [00:04<00:33, 32.68it/s]

 13%|█▎        | 158/1261 [00:04<00:33, 32.59it/s]

 13%|█▎        | 162/1261 [00:04<00:33, 32.64it/s]

 13%|█▎        | 166/1261 [00:04<00:33, 32.91it/s]

 13%|█▎        | 170/1261 [00:04<00:33, 32.87it/s]

 14%|█▍        | 174/1261 [00:05<00:32, 33.27it/s]

 14%|█▍        | 178/1261 [00:05<00:32, 33.69it/s]

 14%|█▍        | 182/1261 [00:05<00:32, 33.38it/s]

 15%|█▍        | 186/1261 [00:05<00:32, 33.09it/s]

 15%|█▌        | 190/1261 [00:05<00:31, 33.58it/s]

 15%|█▌        | 194/1261 [00:05<00:31, 33.99it/s]

 16%|█▌        | 198/1261 [00:05<00:31, 33.93it/s]

 16%|█▌        | 202/1261 [00:05<00:31, 33.79it/s]

 16%|█▋        | 206/1261 [00:05<00:31, 33.53it/s]

 17%|█▋        | 210/1261 [00:06<00:30, 34.02it/s]

 17%|█▋        | 214/1261 [00:06<00:30, 34.72it/s]

 17%|█▋        | 218/1261 [00:06<00:30, 34.69it/s]

 18%|█▊        | 222/1261 [00:06<00:29, 34.67it/s]

 18%|█▊        | 226/1261 [00:06<00:29, 34.63it/s]

 18%|█▊        | 230/1261 [00:06<00:30, 33.67it/s]

 19%|█▊        | 234/1261 [00:06<00:29, 34.53it/s]

 19%|█▉        | 238/1261 [00:06<00:29, 35.26it/s]

 19%|█▉        | 242/1261 [00:06<00:29, 34.80it/s]

 20%|█▉        | 246/1261 [00:07<00:28, 35.27it/s]

 20%|█▉        | 250/1261 [00:07<00:28, 35.19it/s]

 20%|██        | 254/1261 [00:07<00:29, 34.47it/s]

 20%|██        | 258/1261 [00:07<00:28, 34.88it/s]

 21%|██        | 262/1261 [00:07<00:28, 34.59it/s]

 21%|██        | 266/1261 [00:07<00:29, 34.28it/s]

 21%|██▏       | 270/1261 [00:07<00:28, 34.92it/s]

 22%|██▏       | 274/1261 [00:07<00:28, 34.67it/s]

 22%|██▏       | 278/1261 [00:08<00:27, 35.59it/s]

 22%|██▏       | 282/1261 [00:08<00:26, 36.46it/s]

 23%|██▎       | 286/1261 [00:08<00:27, 35.74it/s]

 23%|██▎       | 290/1261 [00:08<00:27, 35.84it/s]

 23%|██▎       | 294/1261 [00:08<00:31, 30.96it/s]

 24%|██▎       | 298/1261 [00:08<00:30, 31.54it/s]

 24%|██▍       | 302/1261 [00:08<00:29, 32.87it/s]

 24%|██▍       | 306/1261 [00:08<00:29, 31.98it/s]

 25%|██▍       | 310/1261 [00:08<00:29, 32.06it/s]

 25%|██▍       | 314/1261 [00:09<00:30, 30.81it/s]

 25%|██▌       | 318/1261 [00:09<00:30, 30.54it/s]

 26%|██▌       | 322/1261 [00:09<00:29, 31.97it/s]

 26%|██▌       | 326/1261 [00:09<00:29, 31.59it/s]

 26%|██▌       | 330/1261 [00:09<00:29, 31.10it/s]

 26%|██▋       | 334/1261 [00:09<00:29, 31.44it/s]

 27%|██▋       | 338/1261 [00:09<00:29, 31.20it/s]

 27%|██▋       | 342/1261 [00:10<00:29, 31.25it/s]

 27%|██▋       | 346/1261 [00:10<00:28, 32.26it/s]

 28%|██▊       | 350/1261 [00:10<00:28, 32.47it/s]

 28%|██▊       | 354/1261 [00:10<00:27, 33.47it/s]

 28%|██▊       | 358/1261 [00:10<00:26, 33.53it/s]

 29%|██▊       | 362/1261 [00:10<00:27, 33.00it/s]

 29%|██▉       | 366/1261 [00:10<00:26, 33.76it/s]

 29%|██▉       | 370/1261 [00:10<00:26, 34.24it/s]

 30%|██▉       | 374/1261 [00:10<00:26, 33.97it/s]

 30%|██▉       | 378/1261 [00:11<00:25, 34.34it/s]

 30%|███       | 382/1261 [00:11<00:25, 33.97it/s]

 31%|███       | 386/1261 [00:11<00:25, 33.81it/s]

 31%|███       | 390/1261 [00:11<00:25, 34.19it/s]

 31%|███       | 394/1261 [00:11<00:25, 34.49it/s]

 32%|███▏      | 398/1261 [00:11<00:25, 34.11it/s]

 32%|███▏      | 402/1261 [00:11<00:25, 34.03it/s]

 32%|███▏      | 406/1261 [00:11<00:24, 34.78it/s]

 33%|███▎      | 410/1261 [00:12<00:25, 33.93it/s]

 33%|███▎      | 414/1261 [00:12<00:24, 34.07it/s]

 33%|███▎      | 418/1261 [00:12<00:25, 32.91it/s]

 33%|███▎      | 422/1261 [00:12<00:25, 32.65it/s]

 34%|███▍      | 426/1261 [00:12<00:25, 33.09it/s]

 34%|███▍      | 430/1261 [00:12<00:25, 32.64it/s]

 34%|███▍      | 434/1261 [00:12<00:24, 33.31it/s]

 35%|███▍      | 438/1261 [00:12<00:24, 32.98it/s]

 35%|███▌      | 442/1261 [00:12<00:24, 33.06it/s]

 35%|███▌      | 446/1261 [00:13<00:25, 32.28it/s]

 36%|███▌      | 450/1261 [00:13<00:24, 32.59it/s]

 36%|███▌      | 454/1261 [00:13<00:24, 32.84it/s]

 36%|███▋      | 458/1261 [00:13<00:24, 32.80it/s]

 37%|███▋      | 462/1261 [00:13<00:24, 33.23it/s]

 37%|███▋      | 466/1261 [00:13<00:23, 34.01it/s]

 37%|███▋      | 470/1261 [00:13<00:23, 34.12it/s]

 38%|███▊      | 474/1261 [00:13<00:23, 34.13it/s]

 38%|███▊      | 478/1261 [00:14<00:22, 34.06it/s]

 38%|███▊      | 482/1261 [00:14<00:22, 34.98it/s]

 39%|███▊      | 486/1261 [00:14<00:22, 34.96it/s]

 39%|███▉      | 490/1261 [00:14<00:21, 35.83it/s]

 39%|███▉      | 494/1261 [00:14<00:22, 34.21it/s]

 39%|███▉      | 498/1261 [00:14<00:22, 34.22it/s]

 40%|███▉      | 502/1261 [00:14<00:22, 34.01it/s]

 40%|████      | 506/1261 [00:14<00:21, 34.51it/s]

 40%|████      | 510/1261 [00:14<00:22, 34.11it/s]

 41%|████      | 514/1261 [00:15<00:22, 33.42it/s]

 41%|████      | 518/1261 [00:15<00:21, 33.89it/s]

 41%|████▏     | 522/1261 [00:15<00:21, 34.53it/s]

 42%|████▏     | 526/1261 [00:15<00:21, 33.72it/s]

 42%|████▏     | 530/1261 [00:15<00:22, 33.01it/s]

 42%|████▏     | 534/1261 [00:15<00:22, 32.54it/s]

 43%|████▎     | 538/1261 [00:15<00:22, 32.34it/s]

 43%|████▎     | 542/1261 [00:15<00:22, 32.00it/s]

 43%|████▎     | 546/1261 [00:16<00:21, 32.86it/s]

 44%|████▎     | 550/1261 [00:16<00:20, 34.05it/s]

 44%|████▍     | 554/1261 [00:16<00:21, 32.55it/s]

 44%|████▍     | 558/1261 [00:16<00:21, 32.83it/s]

 45%|████▍     | 562/1261 [00:16<00:21, 32.67it/s]

 45%|████▍     | 566/1261 [00:16<00:21, 32.49it/s]

 45%|████▌     | 570/1261 [00:16<00:21, 32.49it/s]

 46%|████▌     | 574/1261 [00:16<00:21, 32.31it/s]

 46%|████▌     | 578/1261 [00:17<00:21, 32.17it/s]

 46%|████▌     | 582/1261 [00:17<00:21, 31.63it/s]

 46%|████▋     | 586/1261 [00:17<00:21, 31.29it/s]

 47%|████▋     | 590/1261 [00:17<00:21, 31.27it/s]

 47%|████▋     | 594/1261 [00:17<00:21, 30.51it/s]

 47%|████▋     | 598/1261 [00:17<00:21, 30.61it/s]

 48%|████▊     | 602/1261 [00:17<00:22, 29.71it/s]

 48%|████▊     | 605/1261 [00:17<00:22, 28.53it/s]

 48%|████▊     | 608/1261 [00:18<00:24, 27.16it/s]

 48%|████▊     | 611/1261 [00:18<00:24, 26.15it/s]

 49%|████▉     | 615/1261 [00:18<00:24, 26.83it/s]

 49%|████▉     | 618/1261 [00:18<00:24, 26.38it/s]

 49%|████▉     | 621/1261 [00:18<00:24, 25.77it/s]

 49%|████▉     | 624/1261 [00:18<00:24, 25.56it/s]

 50%|████▉     | 627/1261 [00:18<00:24, 25.93it/s]

 50%|████▉     | 630/1261 [00:18<00:24, 25.87it/s]

 50%|█████     | 633/1261 [00:19<00:24, 25.65it/s]

 50%|█████     | 636/1261 [00:19<00:24, 25.66it/s]

 51%|█████     | 639/1261 [00:19<00:23, 26.52it/s]

 51%|█████     | 642/1261 [00:19<00:23, 26.42it/s]

 51%|█████     | 645/1261 [00:19<00:22, 27.03it/s]

 51%|█████▏    | 648/1261 [00:19<00:22, 27.76it/s]

 52%|█████▏    | 651/1261 [00:19<00:23, 26.20it/s]

 52%|█████▏    | 654/1261 [00:19<00:22, 26.90it/s]

 52%|█████▏    | 658/1261 [00:19<00:21, 28.05it/s]

 52%|█████▏    | 661/1261 [00:20<00:22, 26.50it/s]

 53%|█████▎    | 664/1261 [00:20<00:21, 27.45it/s]

 53%|█████▎    | 667/1261 [00:20<00:21, 28.00it/s]

 53%|█████▎    | 670/1261 [00:20<00:21, 27.78it/s]

 53%|█████▎    | 673/1261 [00:20<00:21, 27.05it/s]

 54%|█████▎    | 676/1261 [00:20<00:21, 27.20it/s]

 54%|█████▍    | 679/1261 [00:20<00:21, 27.01it/s]

 54%|█████▍    | 682/1261 [00:20<00:21, 27.38it/s]

 54%|█████▍    | 685/1261 [00:21<00:22, 25.88it/s]

 55%|█████▍    | 688/1261 [00:21<00:21, 26.38it/s]

 55%|█████▍    | 691/1261 [00:21<00:21, 26.94it/s]

 55%|█████▌    | 695/1261 [00:21<00:20, 28.07it/s]

 55%|█████▌    | 698/1261 [00:21<00:19, 28.61it/s]

 56%|█████▌    | 702/1261 [00:21<00:19, 28.89it/s]

 56%|█████▌    | 706/1261 [00:21<00:18, 29.24it/s]

 56%|█████▋    | 710/1261 [00:21<00:18, 30.09it/s]

 57%|█████▋    | 714/1261 [00:21<00:18, 29.82it/s]

 57%|█████▋    | 717/1261 [00:22<00:18, 29.56it/s]

 57%|█████▋    | 720/1261 [00:22<00:18, 29.58it/s]

 57%|█████▋    | 724/1261 [00:22<00:17, 29.94it/s]

 58%|█████▊    | 727/1261 [00:22<00:18, 29.16it/s]

 58%|█████▊    | 731/1261 [00:22<00:18, 29.26it/s]

 58%|█████▊    | 734/1261 [00:22<00:18, 29.06it/s]

 59%|█████▊    | 738/1261 [00:22<00:17, 29.34it/s]

 59%|█████▉    | 741/1261 [00:22<00:18, 28.77it/s]

 59%|█████▉    | 745/1261 [00:23<00:17, 29.09it/s]

 59%|█████▉    | 749/1261 [00:23<00:16, 30.28it/s]

 60%|█████▉    | 753/1261 [00:23<00:17, 28.83it/s]

 60%|██████    | 757/1261 [00:23<00:17, 29.48it/s]

 60%|██████    | 760/1261 [00:23<00:17, 28.38it/s]

 61%|██████    | 764/1261 [00:23<00:17, 29.09it/s]

 61%|██████    | 767/1261 [00:23<00:17, 28.89it/s]

 61%|██████    | 771/1261 [00:23<00:16, 29.20it/s]

 61%|██████▏   | 774/1261 [00:24<00:16, 29.26it/s]

 62%|██████▏   | 777/1261 [00:24<00:16, 29.01it/s]

 62%|██████▏   | 780/1261 [00:24<00:16, 29.25it/s]

 62%|██████▏   | 784/1261 [00:24<00:16, 29.21it/s]

 62%|██████▏   | 787/1261 [00:24<00:16, 29.43it/s]

 63%|██████▎   | 790/1261 [00:24<00:16, 28.22it/s]

 63%|██████▎   | 793/1261 [00:24<00:16, 28.40it/s]

 63%|██████▎   | 796/1261 [00:24<00:16, 27.63it/s]

 63%|██████▎   | 800/1261 [00:24<00:15, 29.54it/s]

 64%|██████▎   | 803/1261 [00:25<00:16, 28.53it/s]

 64%|██████▍   | 807/1261 [00:25<00:15, 29.47it/s]

 64%|██████▍   | 810/1261 [00:25<00:15, 29.57it/s]

 64%|██████▍   | 813/1261 [00:25<00:16, 27.71it/s]

 65%|██████▍   | 816/1261 [00:25<00:15, 28.02it/s]

 65%|██████▌   | 820/1261 [00:25<00:14, 29.87it/s]

 65%|██████▌   | 824/1261 [00:25<00:14, 31.06it/s]

 66%|██████▌   | 828/1261 [00:25<00:13, 32.10it/s]

 66%|██████▌   | 832/1261 [00:25<00:13, 32.64it/s]

 66%|██████▋   | 836/1261 [00:26<00:13, 32.60it/s]

 67%|██████▋   | 840/1261 [00:26<00:12, 32.44it/s]

 67%|██████▋   | 844/1261 [00:26<00:12, 32.68it/s]

 67%|██████▋   | 848/1261 [00:26<00:12, 32.77it/s]

 68%|██████▊   | 852/1261 [00:26<00:12, 32.41it/s]

 68%|██████▊   | 856/1261 [00:26<00:12, 33.24it/s]

 68%|██████▊   | 860/1261 [00:26<00:12, 33.07it/s]

 69%|██████▊   | 864/1261 [00:26<00:12, 32.82it/s]

 69%|██████▉   | 868/1261 [00:27<00:11, 32.78it/s]

 69%|██████▉   | 872/1261 [00:27<00:11, 32.55it/s]

 69%|██████▉   | 876/1261 [00:27<00:11, 33.08it/s]

 70%|██████▉   | 880/1261 [00:27<00:11, 34.12it/s]

 70%|███████   | 884/1261 [00:27<00:11, 32.96it/s]

 70%|███████   | 888/1261 [00:27<00:11, 33.04it/s]

 71%|███████   | 892/1261 [00:27<00:11, 32.69it/s]

 71%|███████   | 896/1261 [00:27<00:10, 33.52it/s]

 71%|███████▏  | 900/1261 [00:28<00:10, 33.88it/s]

 72%|███████▏  | 904/1261 [00:28<00:10, 33.83it/s]

 72%|███████▏  | 908/1261 [00:28<00:10, 32.73it/s]

 72%|███████▏  | 912/1261 [00:28<00:10, 33.72it/s]

 73%|███████▎  | 916/1261 [00:28<00:10, 33.78it/s]

 73%|███████▎  | 920/1261 [00:28<00:10, 33.00it/s]

 73%|███████▎  | 924/1261 [00:28<00:10, 33.00it/s]

 74%|███████▎  | 928/1261 [00:28<00:10, 33.21it/s]

 74%|███████▍  | 932/1261 [00:28<00:10, 32.75it/s]

 74%|███████▍  | 936/1261 [00:29<00:09, 33.52it/s]

 75%|███████▍  | 940/1261 [00:29<00:09, 33.07it/s]

 75%|███████▍  | 944/1261 [00:29<00:10, 30.92it/s]

 75%|███████▌  | 948/1261 [00:29<00:10, 29.03it/s]

 75%|███████▌  | 951/1261 [00:29<00:10, 29.29it/s]

 76%|███████▌  | 955/1261 [00:29<00:10, 29.61it/s]

 76%|███████▌  | 958/1261 [00:29<00:10, 29.21it/s]

 76%|███████▌  | 961/1261 [00:29<00:10, 29.32it/s]

 76%|███████▋  | 964/1261 [00:30<00:10, 28.42it/s]

 77%|███████▋  | 967/1261 [00:30<00:10, 28.26it/s]

 77%|███████▋  | 970/1261 [00:30<00:10, 27.54it/s]

 77%|███████▋  | 973/1261 [00:30<00:10, 27.55it/s]

 77%|███████▋  | 977/1261 [00:30<00:09, 28.57it/s]

 78%|███████▊  | 980/1261 [00:30<00:09, 28.26it/s]

 78%|███████▊  | 983/1261 [00:30<00:09, 28.62it/s]

 78%|███████▊  | 987/1261 [00:30<00:09, 28.33it/s]

 79%|███████▊  | 990/1261 [00:30<00:09, 28.73it/s]

 79%|███████▉  | 994/1261 [00:31<00:09, 29.41it/s]

 79%|███████▉  | 997/1261 [00:31<00:09, 27.96it/s]

 79%|███████▉  | 1000/1261 [00:31<00:09, 27.85it/s]

 80%|███████▉  | 1003/1261 [00:31<00:09, 27.85it/s]

 80%|███████▉  | 1006/1261 [00:31<00:09, 28.08it/s]

 80%|████████  | 1009/1261 [00:31<00:09, 27.81it/s]

 80%|████████  | 1012/1261 [00:31<00:09, 27.65it/s]

 80%|████████  | 1015/1261 [00:31<00:09, 27.13it/s]

 81%|████████  | 1019/1261 [00:32<00:08, 27.65it/s]

 81%|████████  | 1022/1261 [00:32<00:09, 25.74it/s]

 81%|████████▏ | 1025/1261 [00:32<00:09, 25.70it/s]

 82%|████████▏ | 1028/1261 [00:32<00:08, 26.69it/s]

 82%|████████▏ | 1031/1261 [00:32<00:08, 26.10it/s]

 82%|████████▏ | 1034/1261 [00:32<00:08, 26.87it/s]

 82%|████████▏ | 1037/1261 [00:32<00:08, 27.59it/s]

 82%|████████▏ | 1040/1261 [00:32<00:08, 26.78it/s]

 83%|████████▎ | 1043/1261 [00:32<00:08, 25.41it/s]

 83%|████████▎ | 1047/1261 [00:33<00:08, 26.73it/s]

 83%|████████▎ | 1050/1261 [00:33<00:07, 27.18it/s]

 84%|████████▎ | 1054/1261 [00:33<00:07, 27.63it/s]

 84%|████████▍ | 1058/1261 [00:33<00:06, 29.23it/s]

 84%|████████▍ | 1061/1261 [00:33<00:07, 28.46it/s]

 84%|████████▍ | 1064/1261 [00:33<00:07, 27.62it/s]

 85%|████████▍ | 1068/1261 [00:33<00:06, 28.68it/s]

 85%|████████▍ | 1071/1261 [00:33<00:06, 28.32it/s]

 85%|████████▌ | 1075/1261 [00:34<00:06, 29.14it/s]

 85%|████████▌ | 1078/1261 [00:34<00:06, 27.53it/s]

 86%|████████▌ | 1081/1261 [00:34<00:06, 26.95it/s]

 86%|████████▌ | 1084/1261 [00:34<00:06, 26.89it/s]

 86%|████████▌ | 1087/1261 [00:34<00:06, 27.55it/s]

 86%|████████▋ | 1090/1261 [00:34<00:06, 27.51it/s]

 87%|████████▋ | 1094/1261 [00:34<00:05, 28.29it/s]

 87%|████████▋ | 1097/1261 [00:34<00:05, 28.29it/s]

 87%|████████▋ | 1101/1261 [00:34<00:05, 29.61it/s]

 88%|████████▊ | 1104/1261 [00:35<00:05, 28.37it/s]

 88%|████████▊ | 1108/1261 [00:35<00:04, 30.78it/s]

 88%|████████▊ | 1112/1261 [00:35<00:04, 30.83it/s]

 89%|████████▊ | 1116/1261 [00:35<00:04, 31.80it/s]

 89%|████████▉ | 1120/1261 [00:35<00:04, 32.26it/s]

 89%|████████▉ | 1124/1261 [00:35<00:04, 31.71it/s]

 89%|████████▉ | 1128/1261 [00:35<00:04, 32.31it/s]

 90%|████████▉ | 1132/1261 [00:35<00:03, 32.61it/s]

 90%|█████████ | 1136/1261 [00:36<00:03, 32.83it/s]

 90%|█████████ | 1140/1261 [00:36<00:03, 33.20it/s]

 91%|█████████ | 1144/1261 [00:36<00:03, 33.56it/s]

 91%|█████████ | 1148/1261 [00:36<00:03, 33.47it/s]

 91%|█████████▏| 1152/1261 [00:36<00:03, 33.07it/s]

 92%|█████████▏| 1156/1261 [00:36<00:03, 32.90it/s]

 92%|█████████▏| 1160/1261 [00:36<00:03, 32.95it/s]

 92%|█████████▏| 1164/1261 [00:36<00:03, 32.15it/s]

 93%|█████████▎| 1168/1261 [00:37<00:02, 32.29it/s]

 93%|█████████▎| 1172/1261 [00:37<00:02, 31.64it/s]

 93%|█████████▎| 1176/1261 [00:37<00:02, 32.64it/s]

 94%|█████████▎| 1180/1261 [00:37<00:02, 32.50it/s]

 94%|█████████▍| 1184/1261 [00:37<00:02, 32.92it/s]

 94%|█████████▍| 1188/1261 [00:37<00:02, 32.79it/s]

 95%|█████████▍| 1192/1261 [00:37<00:02, 33.14it/s]

 95%|█████████▍| 1196/1261 [00:37<00:01, 33.62it/s]

 95%|█████████▌| 1200/1261 [00:37<00:01, 33.67it/s]

 95%|█████████▌| 1204/1261 [00:38<00:01, 33.59it/s]

 96%|█████████▌| 1208/1261 [00:38<00:01, 33.12it/s]

 96%|█████████▌| 1212/1261 [00:38<00:01, 33.30it/s]

 96%|█████████▋| 1216/1261 [00:38<00:01, 33.44it/s]

 97%|█████████▋| 1220/1261 [00:38<00:01, 33.19it/s]

 97%|█████████▋| 1224/1261 [00:38<00:01, 32.49it/s]

 97%|█████████▋| 1228/1261 [00:38<00:01, 32.37it/s]

 98%|█████████▊| 1232/1261 [00:38<00:00, 31.65it/s]

 98%|█████████▊| 1236/1261 [00:39<00:00, 32.62it/s]

 98%|█████████▊| 1240/1261 [00:39<00:00, 31.60it/s]

 99%|█████████▊| 1244/1261 [00:39<00:00, 31.35it/s]

 99%|█████████▉| 1248/1261 [00:39<00:00, 29.11it/s]

 99%|█████████▉| 1252/1261 [00:39<00:00, 30.65it/s]

100%|█████████▉| 1256/1261 [00:39<00:00, 29.60it/s]

100%|█████████▉| 1260/1261 [00:39<00:00, 31.24it/s]

[MoviePy] Done.
[MoviePy] >>>> Video ready: total-pipeline.mp4 

CPU times: user 22.9 s, sys: 2.82 s, total: 25.7 s
Wall time: 40.5 s
In [455]:
# Test

bin_img, l, r, shiftl, shiftr = find_lane_lines(undist_test[5],4, [0], [0],'loc')
radinfo = rad_curve(bin_img)
print(radinfo[1][0])
fitx = radinfo[1][0]
#print(len(undist_test[4]))
layer = overlay_curve(undist_test[5], radinfo)
plt.imshow(layer)
[ 369.92690595  368.1521131   366.39189882  364.64626311  362.91520598
  361.19872743  359.49682745  357.80950604  356.13676321  354.47859895
  352.83501327  351.20600616  349.59157762  347.99172766  346.40645628
  344.83576347  343.27964923  341.73811357  340.21115648  338.69877797
  337.20097803  335.71775667  334.24911388  332.79504967  331.35556403
  329.93065696  328.52032847  327.12457856  325.74340722  324.37681445
  323.02480026  321.68736464  320.3645076   319.05622913  317.76252923
  316.48340791  315.21886517  313.968901    312.7335154   311.51270838
  310.30647993  309.11483006  307.93775876  306.77526604  305.62735189
  304.49401631  303.37525931  302.27108089  301.18148104  300.10645976
  299.04601706  298.00015293  296.96886738  295.9521604   294.950032
  293.96248217  292.98951091  292.03111823  291.08730413  290.1580686
  289.24341164  288.34333326  287.45783345  286.58691222  285.73056956
  284.88880548  284.06161997  283.24901303  282.45098467  281.66753489
  280.89866368  280.14437104  279.40465698  278.67952149  277.96896458
  277.27298624  276.59158648  275.92476529  275.27252267  274.63485863
  274.01177317  273.40326627  272.80933796  272.22998822  271.66521705
  271.11502445  270.57941044  270.05837499  269.55191812  269.06003983
  268.58274011  268.12001896  267.67187639  267.23831239  266.81932697
  266.41492012  266.02509185  265.64984215  265.28917103  264.94307848
  264.6115645 ]
Out[455]:
<matplotlib.image.AxesImage at 0x7fec18d62ba8>
In [439]:
# Test area.

class Line():
    def __init__(self):
        self.peak = []
        self.count = 0
        self.fitx = np.zeros((10, 101))
        
Left = Line()
Left.fitx[1] = radinfo[1][0]
print(Left.fitx)
print('\n\n')

def proc(prev_val,r):
    for i in range(0,9):
        Left.fitx[i] = Left.fitx[i+1]
        print(i)
    Left.fitx[-1,0] = 400
    print(Left.fitx)
    print(np.count_nonzero(Left.fitx))
        
        
proc(0,0)
    
    
l = np.average(Left.fitx,0)
print(l)
[[   0.            0.            0.         ...,    0.            0.            0.        ]
 [ 369.92690595  368.1521131   366.39189882 ...,  265.28917103
   264.94307848  264.6115645 ]
 [   0.            0.            0.         ...,    0.            0.            0.        ]
 ..., 
 [   0.            0.            0.         ...,    0.            0.            0.        ]
 [   0.            0.            0.         ...,    0.            0.            0.        ]
 [   0.            0.            0.         ...,    0.            0.            0.        ]]



0
1
2
3
4
5
6
7
8
[[ 369.92690595  368.1521131   366.39189882 ...,  265.28917103
   264.94307848  264.6115645 ]
 [   0.            0.            0.         ...,    0.            0.            0.        ]
 [   0.            0.            0.         ...,    0.            0.            0.        ]
 ..., 
 [   0.            0.            0.         ...,    0.            0.            0.        ]
 [   0.            0.            0.         ...,    0.            0.            0.        ]
 [ 400.            0.            0.         ...,    0.            0.            0.        ]]
102
[ 76.9926906   36.81521131  36.63918988  36.46462631  36.2915206
  36.11987274  35.94968274  35.7809506   35.61367632  35.44785989
  35.28350133  35.12060062  34.95915776  34.79917277  34.64064563
  34.48357635  34.32796492  34.17381136  34.02111565  33.8698778
  33.7200978   33.57177567  33.42491139  33.27950497  33.1355564
  32.9930657   32.85203285  32.71245786  32.57434072  32.43768144
  32.30248003  32.16873646  32.03645076  31.90562291  31.77625292
  31.64834079  31.52188652  31.3968901   31.27335154  31.15127084
  31.03064799  30.91148301  30.79377588  30.6775266   30.56273519
  30.44940163  30.33752593  30.22710809  30.1181481   30.01064598
  29.90460171  29.80001529  29.69688674  29.59521604  29.4950032
  29.39624822  29.29895109  29.20311182  29.10873041  29.01580686
  28.92434116  28.83433333  28.74578335  28.65869122  28.57305696
  28.48888055  28.406162    28.3249013   28.24509847  28.16675349
  28.08986637  28.0144371   27.9404657   27.86795215  27.79689646
  27.72729862  27.65915865  27.59247653  27.52725227  27.46348586
  27.40117732  27.34032663  27.2809338   27.22299882  27.1665217
  27.11150245  27.05794104  27.0058375   26.95519181  26.90600398
  26.85827401  26.8120019   26.76718764  26.72383124  26.6819327
  26.64149201  26.60250919  26.56498422  26.5289171   26.49430785
  26.46115645]